结构体自引用

1结构体自引用

使用结构体遇到自引用问题,比入之前使用串口回调函数用到结构体自引用,使用代码如下:

struct   Callbacklist
{
    int hd;
    P_Callback       callbackfun;
    char *pexitflag;


    struct Callbacklist  pnext;
};

编译显示错误,检查后发现这种声明方式,实际上是结构体里套结构体,无线循环下去。分配内存时,由于是无限嵌套,无法确定结构体长度,所以非法。这种情况应该使用指针来完成嵌套,因为在系统中指针的长度是确定的。

struct   Callbacklist
{
    int hd;
    P_Callback       callbackfun;
    char *pexitflag;


    struct Callbacklist  *pnext;
};

编译成功。

查找资料时,发现另外一种嵌套方式:使用typedef来定义。方式多,结构灵活。(参考博客:http://www.cnblogs.com/renyuan/archive/2012/11/30/2796792.html)

typedef struct tag_1{
    int value;
    struct tag_1 *link; 
} NODE;


struct tag_2;
typedef struct tag_2 NODE;
struct tag_2{
    int value;
    NODE *link;   
};


struct tag_3{
    int value;
    struct tag_3 *link; 
};
typedef struct tag_3 NODE;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值