C结构中的自引用

时间:2011-08-16 09:02:05

标签: c pointers struct

这部分K& R(The C book)让我思考:

从书中可以看出:

struct tnode {
             char *word;
             int    count;
             struct tnode *left;
             struct tnode *right;
};

节点的递归声明可能看起来很简洁,但它是正确的。

因为tnode的定义不使用tnode,而只是指向tnode的指针,编译器会给我们一个免费的传递。但我想知道计算机如何知道在提交tnode时会有多少内存?

2 个答案:

答案 0 :(得分:14)

指针具有固定大小(32/64位,具体取决于平台),因此编译器知道左右指针需要多少内存,并且可以计算结构的整个大小。

出于同样的原因,如果你需要一个指针,它就足以做一个前向声明struct tnode;,你可以使用一个指向该结构的指针,例如:struct tree { struct tnode* root; };

答案 1 :(得分:0)

很简单,struct中有4个成员,每个成员都有已知的内存需求量。

虽然leftrighttnode类型的指针,但在使用{{tnode创建的malloc()实例之前,不需要为其成员分配内存1}}和分配给它们的实例的地址。