概述
在学习链表的时候用到了结构的自引用,这里学习一下:
《C和指针》对结构的自引用的分析还比较清晰!这里做笔记记录下:
在一个结构内部包含一个类型为该结构体本身的成员是否合法呢?下面给出一个例子,仅供判断:
struct SELE_REF1 {
int a;
struct SELF_REF1 b;
int c;
}
这种类型的自引用是非法的,因为成员b是另一个完整的结构,其内部还将包含它自己的成员b。这样重复下去永无止境。这有点像永不会终止的递归程序。
但下面的这个声明是合法的:
struct SELF_REF2{
int a;
struct SEF_REF2 *b;
int c;
}
那为什么这个声明就是合法的呢?
这个声明和上面那个声明的区别就是b现在是一个指针而不是结构。编译器在结构的长度确定之前就已经知道指针的长度,所以这种类型的自引用是合法的。
警惕这个陷阱:
typedef struct {
int a;
SELF_REF3 *b;
int c;
} SELF_REF3;
这个声明的目的是为这个结构创建一个类型名SELF_REF3。但是它失败了,原因是类型名直到声明的末尾才定义,所以在结构声明的内部它尚未定义,怎么就可以使用了呢?
解决方案是定义一个结构标签来声明b,如下:
typedef struct TAG{
int a;
struct TAG *b;
int c;
} SELF_REF3;
这样才是没有问题的!
最后
以上就是娇气寒风为你收集整理的【 C 】结构的自引用的全部内容,希望文章能够帮你解决【 C 】结构的自引用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复