回答
未指定的字段将初始化为零。所以在这里你有一系列的结构。您正在使用一个结构初始化程序初始化数组的第一个元素,该初始化程序将结构的第一个元素初始化为零。第一个结构的其余部分和数组元素的其余部分也将全部为零。这是一个很好的成语。
只是为了确保我正确理解这一点。由于所有非指定字段都初始化为零,因此'= {{0}}'本质上没有影响? – 2010-10-08 00:31:53
它确实有效果。它专门将第一个元素初始化为零,然后隐式地将其余元素初始化为零。如果你省略了{{0}},如果你在函数内部(栈上)声明它,你会得到随机垃圾。 (请注意,如果将此声明为全局并省略{{0}},则它也将初始化为零,但出于不同的原因。) – xscott 2010-10-08 03:47:38
这不是初始化的嵌套大括号。外括号指示的阵列被初始化:
struct mystruct s[10] = { };
由于这是结构的数组,每个结构可与另外的括号进行初始化:
struct mystruct { int x, y, z};
struct mystruct s[10] = { {0, 1, 2}, // <-- initializes s[0].x, s[0].y, s[0].z
{1, 2, 3}, // <-- initializes s[1].x, s[1].y, s[1].z
{2, 3, 4} // <-- initializes s[2].x, s[2].y, s[2].z
};
注意,只有前三个元素是初始化。根据C标准,其余7个元素必须初始化为0.这也是您的代码所发生的情况。正如xscott在他的回复中提到的,初始化列表中的所有内容都被初始化为0.
如图所示?
基本上,你应该把每个复合类型 - 数组,结构等 - 放在它自己的大括号内。
考虑:
struct mystruct
{
int i;
double d;
char s[10];
int a[5];
} s[10] =
{
{ 0, 0.0, "abc", { 1, 2, 3, 4, 5 } },
{ 1, 1.0, "def", { 2, 3 } }, // Partially initialized array
{ 2, 2.0, { 'x', 'y', 'z' }, { 0 } }, // Strings are a shorthand
[9] = { 9, 99, 0, { 9, 8, 7, 6, 5 } }, // C99 - initialize row 9
};
但你也可以省略括号如果你坚持(坏的,过时的做法):
struct mystruct t[3] =
{ // You cannot avoid using these outside braces
0, 0.00, "abc", 1, 2, 3, 4, 5, // Omitted braces
1, 1.11, "bcd", 2, 3, 4, 5, 4,
2, 2.34, // Omitted values
};
任何省略的初始化将被视为零。
使用大括号的优点是,它可以让您省略零件的初始化的一些成员(然后将隐含地初始化为零),同时继续初始化后面的成员。你使用'{'x','y','z'},'就是一个例子。 – 2010-10-07 16:52:10
需要注意的是,虽然内部大括号是可选的,但编译器会检查并确保只在他们应该出现的位置显示大括号,并且没有嵌套的项目具有太多的初始化程序。此外,即使结构不在数组的末尾,也可以省略结构的某些字段,并让编译器自动将它们归零。请注意,这些实现的处理效率各不相同;有些会将初始化记录分成小块,而另一些则会简单地在代码中插入大量的零。例如,如果每个结构看上去像:
typedef struct { char name[8]; char more_stuff[1016]; } THINGIE; THINGIE my_array = {{"Fred"},{"George"},{"Mark"}};
一些编译器会产生3K值得常量数据,而其他人会产生三个相对小'常量,初始化的记录。
- 1. 嵌套结构/数组初始化
- 2. 嵌套结构初始化
- 3. 初始化在C长嵌套结构
- 4. 如何初始化嵌套结构?
- 5. 初始化结构和嵌套结构
- 6. (嵌套)C结构中的方括号
- 7. 如何初始化嵌套数组
- 8. 如何在C++中初始化嵌套结构
- 9. 默认嵌套结构初始化
- 10. 如何在C++中初始化嵌套类的构造函数
- 11. 如何初始化Go中的结构中的嵌套映射?
- 12. 结构数组初始化
- 13. 结构数组初始化
- 14. C结构数组初始化铸造
- 15. 如何初始化结构数组?
- 16. 如何初始化golang中的嵌套结构?
- 17. C结构自动初始化值,数组初始化
- 18. 嵌套初始化列表不构成嵌套数组作为我期望
- 19. 初始化结构中的数组的
- 20. golang用来初始化内部结构对象嵌套结构
- 21. 如何初始化嵌套结构变量?
- 22. 初始化结构数组在类的构造函数C++
- 23. 结构中的数组和初始化
- 24. 结构数组的单线初始化
- 25. 初始化结构数组中的结构数组
- 26. C++结构体初始值初始化
- 27. Matlab的:增值到初始化嵌套的结构单元
- 28. 二维数组的初始化是如何工作的?
- 29. C++ const结构初始化
- 30. C++结构初始化
+1对于一个问题,说明很多人不倾向于了解C. – 2010-10-07 16:54:22