c - 为什么通过 typedef-ed 指针访问 struct 的字段不起作用?

标签 c struct typedef

我有这些声明:

typedef struct egObject {
    int  magicnumber;
} egObject;
typedef struct egObject* ego;

ego e;
//printf("%d",e->magicnumber);

我想从 e 中获取 magicnumber,但是 e->magicnumber 不起作用。这样做的正确方法是什么?

最佳答案

当你声明一个struct时,你为一个struct分配了内存:

egObject e;

当你声明一个指向 struct 的指针时,无论是否使用 typedef,你都会为 pointer 分配空间,但不会为结构。为了访问 struct 的字段,您需要先分配该 struct。执行此操作的特定方式无关紧要 - 您可以静态、动态或在自动存储中分配它,但您必须为其分配一些内存:

ego e = malloc(sizeof(*e));

这足以访问写入字段。读取该字段需要初始化,因为 malloc-ed block 在分配给 magicnumber 的区域中包含未初始化的字节:

e->magicnumber = 123;

现在您可以按照代码的方式打印magicnumber:

printf("%d",e->magicnumber);

注意:如果您选择使用malloc 进行动态分配,您需要在使用完对象后释放该对象:

free(e); // Avoid memory leaks

关于c - 为什么通过 typedef-ed 指针访问 struct 的字段不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938034/

相关文章:

c - 指针上的指针

go - 如何使用 reflect.Type 对 switch 进行断言

c - 编译时的offsetof

c - 代码中制作 head 和 n 有什么区别

c - 在没有现有定义的情况下使用 typedef 是什么意思

c++ - typedef 和在同一范围内使用相同名称的声明

c - 使用结构数组创建 "card"的函数

c - 指针的运行时类型检查

c - zlib-1.2.11 是 "too old"- 编译 libzip-1.3.0 需要 1.1.2

c - 使用 typedef 与不使用 typedef 实现节点