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

use*_*868 0 c struct typedef

我有这些声明:

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

ego e;
//printf("%d",e->magicnumber);
Run Code Online (Sandbox Code Playgroud)

我希望得到魔法数字e,但e->magicnumber不起作用.这样做的正确方法是什么?

das*_*ght 5

声明a时struct,为以下内容分配内存struct:

egObject e;
Run Code Online (Sandbox Code Playgroud)

当你声明一个指向a struct,typedef-ed或not的指针时,你会为指针分配空间,但不会为指针分配空间struct.要访问某个字段,struct您需要先分配该字段struct.您执行此操作的特定方式无关紧要 - 您可以静态,动态或在自动存储中分配它,但您必须为其分配一些内存:

ego e = malloc(sizeof(*e));
Run Code Online (Sandbox Code Playgroud)

这足以进入写作领域.读取该字段需要初始化,因为malloc-ed块在分配给的区域中包含未初始化的字节magicnumber:

e->magicnumber = 123;
Run Code Online (Sandbox Code Playgroud)

现在您可以打印magicnumber代码执行的方式:

printf("%d",e->magicnumber);
Run Code Online (Sandbox Code Playgroud)

注意:如果选择动态分配malloc,free则在完成使用后需要对象:

free(e); // Avoid memory leaks
Run Code Online (Sandbox Code Playgroud)