为什么不允许声明具有自己的标识符的结构作为其元素?其中作为自引用结构,由结构的同一变量用指针符号声明!
这是我试过的代码:
#include<stdio.h>
#include<conio.h>
struct am
{
int a;
struct am k; // this reported an error
};
这段代码报告了一个错误,当我用它作为指针接受它时,我搜索了网络,我开始知道它被称为自引用结构
#include<stdio.h>
#include<conio.h>
struct ko
{
int a;
struct ko * op; // this was allowed by my compiler
};
这个结构工作请告诉我!
我正在使用borland international inc。的
答案 0 :(得分:9)
对象不能包含与自身类型相同的对象;这是不合逻辑的,因为它需要比自身更大。
正如你所说,它可能包含指针或引用,但不包含对象。
我使用的是Borland international inc。的
我不知道你为什么要使用一个已有二十年历史的编译器,以及现在很少有人记得的C ++古老方言。但这和现在一样不可能。
答案 1 :(得分:1)
有两个原因:
struct am
类型不是完成,直到结构定义的结束}
为止;当您尝试将k
声明为struct am
的实例时,编译器仍然不知道struct am
需要多大。
结构不能包含自身的实例,因为该成员还必须包含自身的实例,该实例将包含自身的实例, ad inifinitum ;产生的对象将是无限大的。
结构可以包含指针到同一类型的实例,因为a)您可以创建指向不完整类型的指针,以及b)所有结构指针类型具有相同的大小和表示。