我是靠谱客的博主 娇气寒风,最近开发中收集的这篇文章主要介绍【 C 】结构的自引用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在学习链表的时候用到了结构的自引用,这里学习一下:

《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 】结构的自引用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部