Hii ALL, 我是c和learing结构的新手。我遇到了一个结构声明并对其验证有疑问......
struct a
{
int x;
struct a b;
}
没有这样的结构声明,如果不是那么为什么?
答案 0 :(得分:4)
没有。结构不能包含自身。这根本没有任何意义,因为结果类型将是无限大的。
换句话说,你的结构包括一个自身的实例,而这个实例又包含一个自身的实例,而这个实例又包括一个自身的实例,依此类推,无穷无尽......
从形式上看,您正在尝试声明具有不完整类型的结构成员b
。在C中声明不完整类型的struct成员是违法的。
答案 1 :(得分:2)
这不起作用,因为如果结构是自包含的,编译器无法确定结构的大小。
有效的是:
struct a
{
int x;
struct a* b;
}
然后你有一个指向结构内相同结构的指针。这可以用于例如链表。
答案 2 :(得分:1)
编译它会得到类似于的错误:
src.c: In function `main':
src.c:4: field `b' has incomplete type
然而,使用struct a *b
完全没问题。
http://www.crasseux.com/books/ctutorial/Nested-structures.html