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

时间:2014-04-05 13:37:48

标签: c struct

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

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

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

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

此声明给我错误

  &p; struct foo'定义' struct foo'在收到结束之前尚未完成'}'

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

结构 Trie 中不能包含其他结构 Trie ,它会进行永无止境的递归,但它可能包含指向另一个结构的指针 Trie < / em>的

所以第一个是正确的

typedef struct TRIE
{
    bool is_endpoint;
    bool is_initialized;
    struct TRIE* children[26];
} TRIE;

答案 2 :(得分:0)

  1. 类型T的对象不能包含另一个相同类型的非静态对象。如果有可能,如何找到该对象的大小?指向对象的指针大小在当前系统上始终是恒定的。
  2. 检查currentptr的值是否为非NULL,然后才能访问currentptr的字段(例如is_endpoint)。