c - C 结构中的自引用

标签 c pointers struct

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

关于c - C 结构中的自引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7075834/

相关文章:

c:忽略返回并重复函数

我可以调用带有 int 参数的长参数的函数吗?

c - 函数指针和数组有问题

c - C 代码中的结构体和指针

C语言编程调用函数

c++ - C++中的结构填充

c - fscanf 和 EOF 中的否定扫描集

C++ 如何将指针 vector (双指针)作为常量传递给函数

c++ - 指针的真正“意义”是什么?

c - c 中 malloc 与许多结构的用法