为什么不允许在其元素中使用结构变量本身

Why is using the structure variable itself in its element not allowed?

本文关键字:结构 变量 不允许 元素 为什么      更新时间:2023-10-16

为什么不允许声明具有自己的标识符的结构作为其元素? 其中作为自引用结构,由带有指针符号的结构的同一变量声明!

这是我尝试的代码:

 #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.的TurboC ++版本3.0。

一个对象不能包含与自身类型相同的对象;这是一个逻辑上的不可能,因为它需要比它自己大。

正如您所说,它可以包含指针或引用,但不包含对象。

我使用的是Borland International Inc.的TurboC ++版本3.0。

我不知道你为什么要使用一个二十年前的编译器,以及一种现在很少有人记得的古老的C++方言。但这在当时和现在一样是不可能的。

两个原因:

  1. struct am类型直到结构定义的结束}完成;当你尝试将k声明为struct am的实例时,编译器仍然不知道struct am需要多大。

  2. 结构不能包含自身的实例,因为该成员还必须包含自身的一个实例,
  3. 该实例将包含自身的一个实例ad inifinitum;生成的对象将无限大。

结构可以包含指向相同类型的实例的指针,因为 a) 可以创建指向不完整类型的指针,以及 b) 所有结构指针类型具有相同的大小和表示形式。