如果没有显式类型规范,则无法分配给结构

Dan*_*ker 1 c struct

有了这个定义

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)

那么一切都很好,所以分配给结构不是问题。

dbu*_*ush 5

大括号语法{}指定一个初始化列表,这样的列表只能在初始化中使用。

在这种情况下:

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