这样的结构声明是否可能在c

时间:2011-03-04 06:37:15

标签: c structure

Hii ALL,          我是c和learing结构的新手。我遇到了一个结构声明并对其验证有疑问......

struct a
{ 
int x;
struct a b;
}

没有这样的结构声明,如果不是那么为什么?

3 个答案:

答案 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