[英]How to initialize array of structures with?
struct SampleStruct {
int a;
int b;
float c;
double d;
short e;
};
对于像这样的数组,我曾经初始化它如下:
struct SampleStruct sStruct = {0};
我想知道当我声明这个结构的数组时,我认为这是正确的
struct SampleStruct sStructs[3] = {{0},{0},{0}};
但是,下面也被编译器接受了
struct SampleStruct sStructs[3] = {0};
我想知道最好,最安全的方法和详细原因。
$ gcc --version
gcc (GCC) 4.6.1 20110819 (prerelease)
如果使用-Wall
选项,我的gcc会给出关于第三个的警告:
try.c:11:9: warning: missing braces around initializer [-Wmissing-braces]
try.c:11:9: warning: (near initialization for ‘sStruct3[0]’) [-Wmissing-braces]
表示你应该写= {{0}}
进行初始化,它将第一个结构的第一个字段设置为0,其余部分隐式设置为0。 该程序在这个简单的情况下给出了正确的结果,但我认为你不应该依赖于这个并且需要正确地初始化事物。
gcc-4.3.4不会给前两个声明带来错误,而它会给第三个声明带来错误。
struct SampleStruct sStruct1 = {0};
有效,因为在这种情况下0是字段a
的值。 其余字段隐式初始化为零。
struct SampleStruct sStructs2[3] = {{0},{0},{0}};
因为你在这里所做的是声明三个结构并将每个结构的字段'a'初始化为零而起作用。 其余字段隐式初始化为零。
struct SampleStruct sStructs3[3] = {0};
不起作用,因为在大括号内编译器期望看到对应于三个结构的东西,而数字零不是它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.