K& R(C书)的这部分让我思考:
从书中
struct tnode { char *word; int count; struct tnode *left; struct tnode *right; };
一个节点的递归声明可能看起来很谦虚,但它是正确的.
因为tnode的定义不使用tnode,而只是一个指向tnode的指针,编译器会给我们一个免费的通行证.但我想知道如何计算机知道有多少内存给一个tnode?
解决方法
指针具有固定大小(32/64位,取决于平台),因此编译器知道左右指针需要多少内存,并可以计算结构的整体大小.
由于同样的原因,如果你需要一个指针,就足够做一个前向声明struct tnode;并且可以使用该结构体的指针,例如:struct tree {struct tnode * root; };