为什么结构不能成为自己的成员?
我有一个结构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;
- 类型T的对象不能包含另一个相同类型的非静态对象。 如果有可能,如何找到该对象的大小? 指向对象的指针大小在当前系统上始终是恒定的。
- 在访问
currentptr
字段(如is_endpoint
)之前,检查currentptr
值是否为非NULL。