我可以在C中以其自己的结构(递归结构)创建一个结构的实例吗?
赞:
int main(void)
{
struct type
{
char name[20];
char address[35];
struct type;
};
return 0;
}
当然,编译器会警告我:
warning: declaration does not declare anything
但是他/它让它通过并给了我一个可执行程序。
当我想用C ++编译器编译相同的程序时,他/它抛出了一个错误:
error: ‘main()::type::type’ has the same name as the class in which it is declared
所以问题是针对C,而不是C ++。
提前感谢。
首先,struct type;
是前向声明,而不是成员变量定义。其次,不,您不能做,您需要使用指针。
要使用结构,必须对其进行完全定义,定义必须在使用之前结束(以}
结尾)。否则,编译器将不知道结构的完整大小,也不知道结构的大小以及为该结构实例保留的内存量。
但是要创建指向结构的指针,编译器需要知道的只是结构标记(在您的情况下为type
)。那是因为指针的大小在编译时就知道了。此时,不需要知道完整结构的大小。