首页 » 信息技术 »

定义自引用的C语言结构体

2020年12月25日 / 9次阅读
CC++

稍微有点规模的C语言程序,都大量使用结构体struct这种类型的数据,而结构体之间的指针引用,几乎不可避免。本文总结自引用的结构体定义。

不使用typedef时

不使用typedef的时候,允许直接定义自引用的指针,但是不能定义自引用成员结构体。请看下面的错误:

struct tag{
    struct tag A;   /* Wrong:无限循环的结构体 */
    int value;
};

这种声明是错误的,因为这实际上是一个无限循环,成员A是一个结构体,A的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。

这种情况,只能使用指向结构体的指正,下面是正确的定义:

struct tag{
    struct tag *A;   /* Right */
    int value;
};

指正的长度是确定的,以上定义合法可行。

使用typedef时

在使用typedef的时候,情况有一些不同。

先看错误的定义:

typedef struct tag{
    Node *A;   /* Wrong:Node is undefined here */
    int value;
} Node;

以上定义,使用了指针,但是还是错的,因为typedef将 struct tag 重命名为 Node,但是在这个结构体内部,Node属于未定义。

正确的定义方式如下:

typedef struct tag{
    struct tag *A;   /* Right by using original name */
    int value;
} Node;

总结一下:定义自引用的结构体,使用指向原名称的指针!

本文链接:https://www.maixj.net/ict/self-referential-struct-24250

相关文章

留言区

《定义自引用的C语言结构体》有1条留言

  • 麦新杰

    使用typedef的时候,两处的name可以是一样的! []


前一篇:
后一篇:
-->只要几分钟回答问卷,就能轻松赚现金!

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

go to top