鱼C论坛

 找回密码
 立即注册
查看: 877|回复: 10

[已解决]请问int a[10]={[3]=3,[5]=5};为什么不行

[复制链接]
发表于 2020-7-22 10:01:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
之前听了小甲鱼的课程,说这样可以给指定数组位置赋值,但是我这样写了并没有,我是用的是Dev-C++ 5.11 是因为编程环境吗,谢谢
最佳答案
2020-7-22 10:30:01
本帖最后由 sunrise085 于 2020-7-22 10:31 编辑


这种写法是C99的新特性,估计你的DEV-C不支持C99。
C99增加了一个新特性:指定初始化器。利用该特性可以初始化指定的数组元素。例如,只初始化数组中的最后一个元素。对于传统的的C初始化语法,必须初始化最有一个元素之前的所有与还俗,才能初始化它:

int arr[6]={0,0,0,0,0,212];//传统的语法

而使用C99的新特性:

int arr[6]={[5]=212};

这样写和上面的结果是一样的,由于前几个元素没有初始化,所以编译器会自动把它们设置为0。

如果指定初始化器后面有更多的值,如:

int arr[8]={[5]=212,3,4};

这个时候arr[6]就初始化3,另外如果再次初始化之前指定的元素,那么最后的初始化将会取代之前的初始化。

如果未指定数组元素的大小的话

如:int arr[]={1,[6]=23,4}

这个时候编译器会把数组的大小设置为足够装得下初始化的值。上面这个数组的长度就是8.
引用自:https://blog.csdn.net/dream_follower/article/details/80298330

可以网上查一下,如何让DEV-C支持C99的特性。
应该是有方法的。
我在网上查了一下好像有,但是没有试验,就不在这里放了,怕出错。你自己查一下试试吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-22 10:01:48 | 显示全部楼层
#include <stdio.h>

int main(){
       
        int a[10]={[3]=3,[5]=5};
        int i;
        for (i=0;i<10;i++){
                printf("%d\n",a[i]);
               
        }       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 10:22:09 | 显示全部楼层
这种奇葩初始方法我还真没见过,试了试也报错了,但既然C++ Primer Plus 这本超级啰嗦的书都没讲,
可能是小甲鱼的教程有点年代了吧(我也没怎么看,纯属猜测),
就不要管吧,如果看到就改成正确的方式吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 10:30:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-7-22 10:31 编辑


这种写法是C99的新特性,估计你的DEV-C不支持C99。
C99增加了一个新特性:指定初始化器。利用该特性可以初始化指定的数组元素。例如,只初始化数组中的最后一个元素。对于传统的的C初始化语法,必须初始化最有一个元素之前的所有与还俗,才能初始化它:

int arr[6]={0,0,0,0,0,212];//传统的语法

而使用C99的新特性:

int arr[6]={[5]=212};

这样写和上面的结果是一样的,由于前几个元素没有初始化,所以编译器会自动把它们设置为0。

如果指定初始化器后面有更多的值,如:

int arr[8]={[5]=212,3,4};

这个时候arr[6]就初始化3,另外如果再次初始化之前指定的元素,那么最后的初始化将会取代之前的初始化。

如果未指定数组元素的大小的话

如:int arr[]={1,[6]=23,4}

这个时候编译器会把数组的大小设置为足够装得下初始化的值。上面这个数组的长度就是8.
引用自:https://blog.csdn.net/dream_follower/article/details/80298330

可以网上查一下,如何让DEV-C支持C99的特性。
应该是有方法的。
我在网上查了一下好像有,但是没有试验,就不在这里放了,怕出错。你自己查一下试试吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 11:21:25 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-7-22 11:24 编辑
sunrise085 发表于 2020-7-22 10:30
这种写法是C99的新特性,估计你的DEV-C不支持C99。

可以网上查一下,如何让DEV-C支持C99的特性。


改成 c99 就可以了

【dev-C++ 技巧】支持 ☆C++14,【windows api】,C99 的方法
https://fishc.com.cn/thread-173223-1-1.html
(出处: 鱼C论坛)

加个 -std=c99
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 11:36:16 | 显示全部楼层
这个应该就是编译器的问题,看编译器支持的标准版本!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 11:45:37 | 显示全部楼层
livcui 发表于 2020-7-22 10:22
这种奇葩初始方法我还真没见过,试了试也报错了,但既然C++ Primer Plus 这本超级啰嗦的书都没讲,
可能是 ...
但既然C++ Primer Plus 这本超级啰嗦的书都没讲
这是 C 的语法,而不是 C++ 的语法,C++ 的书上肯定没有。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 11:47:55 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-22 11:45
这是 C 的语法,而不是 C++ 的语法,C++ 的书上肯定没有。

嗯,楼主用的是C++啊,
再说,C基础的东西基本和C++一样(大部分)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 11:54:43 | 显示全部楼层
livcui 发表于 2020-7-22 11:47
嗯,楼主用的是C++啊,
再说,C基础的东西基本和C++一样(大部分)

可楼主学的是 C 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 12:06:43 | 显示全部楼层
应该是编译环境的问题,我在Linux vi编译可以通过,也不用加-std=c99
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 12:59:16 | 显示全部楼层

hh,可一开始我不知道啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 12:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表