可以初始化/分配结构指针吗?

大卫542

假设我有以下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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在结构中分配未初始化的char指针或char指针可以吗?

给定一个指向结构的指针,我可以在一行中将聚合初始化程序的结果分配给该结构吗?

我可以在其成员是指向指针的指针的结构中使用标量初始化吗?

我怎么能初始化分配了零字节的指针呢?

使用共享指针初始化动态分配的结构

初始化结构指针

gcc优化跳过初始化分配的内存

泛型值初始化分配器

内联lambda初始化程序可以捕获“ this”指针吗?

您可以在结构初始化内部创建数组吗?

如何在结构数组中初始化和动态分配int指针成员?

初始化指向 typedef 结构的指针

初始化结构指针的值

初始化结构的指针数组

使用指针初始化C结构

从空指针初始化类/结构

结构初始化指向NULL的指针

如何从结构初始化void *指针

分配与初始化结构变量

初始化结构而不分配?

如何防止GNU缩进破坏初始化分配,例如“ = {0};”

大括号初始化分配为什么用垃圾填充变量?

使用列表初始化分配向量大小(大括号)

malloc(sizeof(x)) 是否用 x 初始化分配的内存?

您可以使用Golang反射来初始化指针变量吗?

可以在初始化的函数指针声明中将`auto`关键字用作返回类型吗?

如何在结构中初始化 int 指针并将其分配给 C 中的数组?

C:初始化一个结构并将其分配给函数参数中的指针

用括号初始化器可以擦除结构数组吗?