假设我有以下struct和两个版本对其进行初始化:
#include <stdio.h>
typedef struct Car *CarPtr;
typedef struct Car {
const char* name;
unsigned int price;
} Car;
int main(void) {
Car ford = {
.name = "Ford F-150",
.price = 25000
};
print_struct(&ford);
// is this possible to do in a single assignment?
CarPtr jeep = {
.name = "Jeep",
.price = 40000
};
print_struct(jeep);
}
第二个版本可以直接使用吗?还是我需要按照以下方式做一些事情:
CarPtr jeep;
jeep->name = "Jeep";
jeep->price = 40000;
还是CarPtr
直接初始化类型的正确方法是什么?
除空指针外,指针还需要指向存在的对象(可以是已分配但尚未填充的内存)。您可以使用复合文字定义一个指针并将其初始化为同时创建的对象:
CarPtr jeep = & (Car) { .name = "Jeep", .price = 40000 };
这是一种特殊的语法,括号中的类型名称与定义中的包含初始化程序的花括号相同。(这不是演员。)
您还可以将复合文字或它的地址直接传递给函数:
print_struct(& (Car) { .name = "Jeep", .price = 40000 });
但是,这具有有限的用途,因为如果在函数内部完成此操作,则该对象是临时的。它的生存期仅在当前函数执行持续的时间内持续。您可以在函数外部使用复合文字,然后该文字才能持续执行所有程序。使用复合文字之前,您应该对复合文字的属性有一般的了解和认识。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句