【发布时间】:2021-04-12 16:33:36
【问题描述】:
Struct 的以下两个初始化有什么区别?
Car ford = {
.name = "Ford F-150",
.price = 25000
};
还有:
Car dodge = (Car) {
.name = "Ram",
.price = 1000
};
来自Compiler Explorer,看起来两者产生了相同的代码:
(StructName) 在结构体之前有什么作用?在进行复杂的初始化时似乎是必要的,例如:
CarPtr mazda = & (Car) {
.name = "Mazda",
.price = 20000
};
【问题讨论】:
-
查看这个关于compound literals 的问答。也许不是最好的帖子,但还有很多其他关于 C 中复合文字的帖子。
-
初始化结构体变量时不需要。初始化指针时需要它,因为指针需要一个对象来指向,而复合字面量会创建一个对象。
-
@Barmar 对象不会是
{...}吗?为什么需要(ObjType)来指定? -
您不能仅使用
{...}创建对象。那是一个初始化列表,所以它只能在初始化结构时使用。发明复合文字是为了允许创建匿名对象。
标签: c struct initialization compound-literals