在c语言中声明时按索引分配数组
Posted
技术标签:
【中文标题】在c语言中声明时按索引分配数组【英文标题】:Array assignment by index while declaration in c language 【发布时间】:2013-07-22 08:10:33 【问题描述】:void fun ()
int i;
int a[]=
[0]=3,
[1]=5
;
c语言是否支持上述的a[]数组赋值方式。如果是,哪个 c 版本。 我用 gcc 编译了上面的代码,它工作正常。
但我以前从未见过这种作业。
【问题讨论】:
我相信这是一个 GCC 扩展。 【参考方案1】:这是 C89 的 GCC 扩展,是 C99 标准的一部分,称为“指定初始化程序”。
见http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html。
【讨论】:
【参考方案2】:必须使用gcc -std=c99
或以上编译,否则会得到:
warning: x forbids specifying subobject to initialize
GNU C 允许将此作为 C89 中的扩展,当 -pedantic
标志打开时跳过此警告,您可以使用 __extension__
void fun ()
int i;
__extension__ int a[]=
[0]=3,
[1]=5
;
【讨论】:
【参考方案3】:来自GNU C Reference Manual:
当使用 ISO C99 或带有 GNU 扩展的 C89 时,您可以通过指定要初始化的数组索引来乱序初始化数组元素。为此,请将数组索引包含在括号中,并在值之前包含可选的赋值运算符。这是一个例子:
int my_array[5] = [2] 5, [4] 9 ;
或者,使用赋值运算符:
int my_array[5] = [2] = 5, [4] = 9 ;
这两个例子都等价于:
int my_array[5] = 0, 0, 5, 0, 9 ;
【讨论】:
以上是关于在c语言中声明时按索引分配数组的主要内容,如果未能解决你的问题,请参考以下文章