簡體   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