有了这个定义
struct A {
int x;
};
Run Code Online (Sandbox Code Playgroud)
为什么是
struct A a = {0};
Run Code Online (Sandbox Code Playgroud)
有效语法同时
struct A a;
a = {0};
Run Code Online (Sandbox Code Playgroud)
产生错误,“‘{’标记之前的预期表达式”?
如果我将该行替换为
a = (struct A){0};
Run Code Online (Sandbox Code Playgroud)
那么一切都很好,所以分配给结构不是问题。
大括号语法{}指定一个初始化列表,这样的列表只能在初始化中使用。
在这种情况下:
struct A a = {0};
Run Code Online (Sandbox Code Playgroud)
a使用 and 进行声明和初始化{0}是有效的语法。
这是无效的:
a = {0};
Run Code Online (Sandbox Code Playgroud)
因为这是一个表达式,所以初始值设定项列表不能出现在表达式中。
这:
a = (struct A){0};
Run Code Online (Sandbox Code Playgroud)
不是强制转换,而是复合文字的示例。其语法与强制转换类似,但它所做的是创建一个类型的对象struct A并为其提供一个初始值设定项。然后将该对象分配给a。