这是初始化数组的一种不常见的方法:
int a[3] = {[2] 5, [0] 10, [1] 15};
在程序中使用此数组
#include <stdio.h>
int main() {
//code
int a[3] = {[2] 5, [0] 10, [1] 15};
printf("a[0] = %d a[1] = %d a[2] = %d\n", a[0], a[1], a[2]);
return 0;
}
输出:
a[0] = 10 a[1] = 15 a[2] = 5
在线编译器链接: http://code.geeksforgeeks.org/4onQAI
所以,我有一个问题:
这是初始化数组的正确方法吗?
答案 0 :(得分:19)
关闭。正确的方法如下:
int a[3] = {[2] = 5, [0] = 10, [1] = 15};
这是指定的初始化程序,它允许您初始化指定的元素。未指定的任何元素都设置为0.
这在C standard的第6.7.9节中有详细说明。
您显示的语法是某些编译器支持的非标准扩展,特别是GCC。如果您使用-pedantic
进行编译,则会收到以下警告:
警告:过时使用没有'='的指定初始化程序
答案 1 :(得分:11)
您的代码段对此指定的初始值设定项使用了过时的语法:
int a[3] = {[2] = 5, [0] = 10, [1] = 15};
自GCC 2.5以来已经过时的替代语法已经过时,但GCC仍然接受的是在元素值之前写'[index]',没有'='。 (reference)
省略=
不是标准,不应用于新开发。
答案 2 :(得分:7)
使用指定初始值设定项的正确方法是
int a[3] = {[2] = 5, [0] = 10, [1] = 15};
根据C标准,=
和值之间应该有[index]
初始化的方式可能是一些扩展。
用于初始化的语法(C11-§6.7.9)
initializer: assignment-expression { initializer-list } { initializer-list , } initializer-list: designationopt initializer initializer-list , designationopt initializer designation: designator-list = designator-list: designator designator-list designator designator: [ constant-expression ] . identifier