为什么结构不能成为自己的成员?

我有一个结构foo 。 声明foo*类型的成员:

 typedef struct foo { struct foo* children[26]; } foo; 

但是如果我尝试声明foo类型的成员,我会收到一个错误:

 typedef struct foo { struct foo children[26]; } foo; 

这个声明给了我错误

‘struct foo’的定义在结束’}’之前是不完整的

结构T不能包含自身。 你怎么知道它的大小? 这样做是不可能的,因为T的大小需要你知道T的大小(因为T包含另一个T )。 这变成了无限递归。

你可以在结构T有一个指向T的指针,因为指针的大小与指向对象的大小不同:在这种情况下,你只需要存储另一个T存储的内存地址 – 所有空间你需要做的就是你需要存储另一个T所在的内存地址所需的空间。

结构Trie中不能包含另一个结构Trie ,它会做一个永无止境的递归,但它可能包含一个指向另一个结构的指针Trie

所以第一个是正确的

 typedef struct TRIE { bool is_endpoint; bool is_initialized; struct TRIE* children[26]; } TRIE; 
  1. 类型T的对象不能包含另一个相同类型的非静态对象。 如果有可能,如何找到该对象的大小? 指向对象的指针大小在当前系统上始终是恒定的。
  2. 在访问currentptr字段(如is_endpoint )之前,检查currentptr值是否为非NULL。