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; };