[转]相互引用的结构体的定义

Posted konjakjuruo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转]相互引用的结构体的定义相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/f290131665/article/details/17678851

 

样例1(正确样例):

typedef struct tagTest_B TEST_B_S;

typedef struct tagTest_A
{
TEST_B_S *pstB;
} TEST_A_S;

struct tagTest_B
{
TEST_A_S *pstA;
};




看完上面这个样例,大家再来看看下面这个例子,看一下有没有什么问题?


样例2(错误样例):

typedef struct tagTest_B TEST_B_S;

typedef struct tagTest_A
{
TEST_B_S stB;
} TEST_A_S;

struct tagTest_B
{
TEST_A_S *pstA;
};

如果我们使用VC进行编译(当然你也可以使用GCC编译),VC编译的时候会报错,如下:
error C2079: ‘stB‘ uses undefined struct ‘tagTest_B‘
这是什么原因呢?

这是因为声明的时候只是简单的表明是某种结构体而已,而结构体的内容我们不得而知。
因此我们引用的时候只能使用指针而不能直接使用结构体,因为只有这样才能为结构体分配确定的内存
(指针的内存始终是4字节,而未知结构体的内存大小是不确定的)。









































以上是关于[转]相互引用的结构体的定义的主要内容,如果未能解决你的问题,请参考以下文章

c语言自定义类型——结构体,位段(匿名结构体,结构体的自引用,结构体的内存对齐)

深度剖析结构体@自定义类型1---结构体的声明,自引用,变量定义和初始化 + 结构体内存对齐 + 结构体传参 + 结构体实现位段

golang中级进阶(二):结构体

c语言一个结构体如何在多个源文件里面调用?

自定义类型详解

结构体的声明是在文件中的那个位置,函数的声明是在引用函数的声明部分还是在整个文件开始