我有这些声明:
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/