c - C中的嵌套结构

标签 c nested structure

struct s{ 
int a; 
struct s b;
};

上面的代码段抛出错误 error: field 'b' has incomplete type while

struct s{ 
int a; 
struct s *b;
};

没有给出任何错误。我不明白为什么允许指针而不是非指针变量!

最佳答案

类成员在声明的时候必须有完整的类型,这样才能根据它们的大小来决定类的布局。

在类定义中,类本身是不完整的,所以不能声明相同类型的成员。无论如何这都是不可能的(至少如果有任何其他成员的话),因为类必须比它自己大。

指针是一个完整的类型,即使它指向的类型不是,所以您可以将类成员声明为指向类类型的指针。

(注意:我使用“类”这个词,因为我是一名 C++ 程序员。我只是注意到这个问题也被标记为 C,并且 C++ 已经被删除了。我相信答案仍然是正确的那种语言,如果你用“结构”替换“类”,但我不完全确定,因为它们是不同的语言。如果你只询问一种语言会更好,因为存在差异(有时是主要的,有时是细微的)语言之间。)

关于c - C中的嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244803/

相关文章:

c - gcc 共享库链接到 glibc 失败

c - strcmp 和 strcpy 已损坏。当我尝试用 C 语言按字母顺序排列它们时,我丢失了一个单词

java - 可以在 Java 中实例化静态嵌套类吗?

c++ - 使用两个标准对结构数组进行排序 C++

c - C 中赋值中的不兼容类型

c - 如何在 C 中打印二维字符串数组(带空格)?

计算地址 : pointer + non-negative number

python - 字典、用于切片和切 block 菜单的嵌套值

redirect - 如何在 Node.js + Express 中重定向嵌套 url

java - 如何在链表java中的第一个元素前面添加一个点?