K&R(C书)的这一部分让我想到:
从书中:

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

一个节点的递归声明可能看起来很危险,但它是正确的。
因为tnode的定义不使用tnode,而只是一个指向tnode的指针,所以编译器给了我们一个自由传递。但我想知道,当一个tnode被声明时,计算机是如何知道它需要多少内存的?

最佳答案

指针的大小是固定的(32/64位取决于平台),因此编译器知道左指针和右指针需要多少内存,并可以计算结构的整个大小。
出于同样的原因,如果您需要一个指针,它就足以做一个forward声明struct tnode;,并且您可以为该结构使用一个指针,例如:struct tree { struct tnode* root; };

09-06 15:42