结构体常见问题

问题一: 结构体的自引用

错误: 

typedef struct _Pos{
    int x;
    int y;
    struct _Pos z;
}pos;

定义一个结构体,其内部又定义了一个同类的结构体变量,这是一种错误。(因为如果你在结构体内部定义自己类型的结构体变量,在定义结构体的过程中,它会不断地去创建新的结构体变量,一直递归下去,没完没了) -- 有的编译器会检测到这种错误的写法。


正确:
我们可以在结构体内部放一个指向自己类型的指针,这样就不会出现上面的问题了。
typedef struct _Pos{
    int x;
    int y;
    struct _Pos *z;
}pos;

 

问题二:  结构体指针 

pos* ptr;       // 定义一个结构体指针

注意下面的操作是不合法的:

ptr+1;             //  对于结构体,因为其内部存储数据类型并不一样,所以我们无法使用指针                               或者下标运算符进行访问内部数据 

(*ptr)+1;         // ptr是指向结构体的指针,内部存放的是结构体所在的地址,虽然结构体所在的地址(其首地址),和其第一个元素的(首)地址是一样的,但是*ptr的结果并不是结构的第一个元素,而表示的是ptr指向的是结构,因为ptr是结构类型的指针。对于结构体和一个整数像加时未定义的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值