繁体   English   中英

在c语言中声明时按索引分配数组

[英]Array assignment by index while declaration in c language

void fun ()
{
    int i;
    int a[]=
    {
    [0]=3,
    [1]=5
    };
}

c语言是否支持上述[]数组赋值方式。 如果是哪个c版本。
我使用gcc编译上面的代码它工作正常。

但我以前从未见过这种作业。

这是C89的GCC扩展,是C99标准的一部分,称为“指定初始化程序”。

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html

必须使用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
    };
}

GNU C参考手册

使用带有GNU扩展的ISO C99或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 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM