为什么允许结构体将“指向其自身类型的指针”作为成员,但不允许“结构体类型(的数组)”本身?

2023-12-13

当我尝试声明以下函数时

typedef struct TRIE_NODE
{
    char* word;
    struct TRIE_NODE node[26];
}TRIE_NODE;

我收到以下错误:

“struct TRIE_NODE”的定义直到结束“}”才完成

但是,如果我使用指向 26 个节点的指针来声明此函数,则它可以正常编译。

typedef struct TRIE_NODE
{
    char* word;
    struct TRIE_NODE* node[26];
}TRIE_NODE;

我想,由于这不是一个实例,我不可能获得指向这 26 个数组中第一个数组的指针,但如果这是问题所在,那么怎么办?TRIE_NODE* node[26]不也是个问题吗?这个声明不等于TRIE_NODE node[1][26]?


当我尝试声明以下函数时

Wait!!这不是一个函数,而是typedef-ing 一个结构,一个用户定义的类型。


也就是说,在第一种情况下,

typedef struct TRIE_NODE
{
    char* word;
    struct TRIE_NODE node[26];  //array of type struct TRIE_NODE
}TRIE_NODE;

如果这必须是可能的,编译器需要知道的大小struct TRIE_NODE before它已经被定义了,这是不可能的。所以是无效的。

另一方面,

typedef struct TRIE_NODE
{
    char* word;
    struct TRIE_NODE* node[26];  //array of pointers (of type struct TRIE_NODE)
}TRIE_NODE; 

很好,当您将指针(数组)分配给结构时,编译器此时不需要知道结构的实际大小。因此,编译器愉快地分配指针,并且定义(构造)是完全有效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么允许结构体将“指向其自身类型的指针”作为成员,但不允许“结构体类型(的数组)”本身? 的相关文章

随机推荐