这是初始化数组的一种不常见的方法:
int a[3] = {[2] 5, [0] 10, [1] 15};
Run Code Online (Sandbox Code Playgroud)
在程序中使用此数组,
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
a[0] = 10 a[1] = 15 a[2] = 5
Run Code Online (Sandbox Code Playgroud)
在线编译链接: http ://code.geeksforgeeks.org/4onQAI
所以,我有一个问题:
这是初始化数组的正确方法吗?
dbu*_*ush 19
关.正确的方法如下:
int a[3] = {[2] = 5, [0] = 10, [1] = 15};
Run Code Online (Sandbox Code Playgroud)
这是一个指定的初始值设定项,允许您初始化指定的元素.未指定的任何元素都设置为0.
您显示的语法是某些编译器支持的非标准扩展,特别是GCC.如果您要编译-pedantic
,您将收到以下警告:
警告:过时使用指定的初始化程序而不使用'='
das*_*ght 11
您的代码段对此指定的初始值设定项使用了过时的语法:
int a[3] = {[2] = 5, [0] = 10, [1] = 15};
Run Code Online (Sandbox Code Playgroud)
自GCC 2.5以来已经过时的替代语法已经过时,但GCC仍然接受的是在元素值之前写'[index]',没有'='.(参考)
省略=
不是标准的,不应该用于新的开发.
使用指定初始化程序的正确方法是
int a[3] = {[2] = 5, [0] = 10, [1] = 15};
Run Code Online (Sandbox Code Playgroud)
根据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