【发布时间】:2021-04-12 16:18:33
【问题描述】:
假设我有以下结构和两个版本来初始化它:
#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类型的正确方法是什么?
【问题讨论】:
-
指针需要先分配才能初始化/分配指针
-
@AdnanAhmed
new是 C++。这被标记为 C -
@Heal 抱歉,我忽略了这一点。该评论已被编辑。
-
由于它是一个指针,因此您必须将 malloc 用于 CarPtr,而且您没有在代码的最后一个示例中将任何 Car 类型变量的地址分配给 CarPtr,并且使用了使用 malloc 的 Car_new 等构造函数建议用于初始化。
标签: c struct initialization list-initialization compound-literals