C语言之复杂结构体的访问

任意一个可以在结构外部声明的变量都可以作为结构的成员. 包括数组, 指针, 其他结构等. 对于结构成员的访问可以使用 点操作符(.)箭头操作符(->) 完成. 本文举例介绍复杂结构体成员的访问. 结构体声明如下:

// 创建新的结构类型Tag
typedef struct
{
    int num;
    short date[3];
} Tag;
// 创建新的结构类型Msg时增加了结构名MSG
typedef struct MSG
{
    int num;              // 标量成员
    char name[3];         // 数组成员
    Tag tag;              // 结构成员
    struct MSG *ptr;      // 指向结构自身的指针成员
} Msg;
// 定义Msg类型的结构体
Msg msg;
// 定义指向msg对象的指针
Msg *ptr_msg = &msg;

msg结构可以用下图表示:
msg结构

  • *ptr_msg 右值结果是整个msg结构体, 左值结果是ptr_msg指向的内存空间.
  • ptr_msg->num = msg.num 访问成员num.
  • &ptr_msg->num 指向成员num的指针, 注意 -> 的优先级大于 &.
  • ptr_msg->name[1] 访问数组name的第二个元素.
  • ptr_msg->tag 右值结果是tag结构体, 左值是结构体tag的内存空间.
  • ptr_msg0>tag.num 访问tag结构的num成员(不与msg的num成员冲突).
  • *ptr_msg->tag.date 访问date数组的第一个元素. 首先执行 ptr_msg->tag 得到tag结构体, 然后执行 tag.date 得到常量指针, 最后解引指针得到date的第一个元素.
  • ptr_msg->ptr->num 访问另一个Msg结构体的num成员.
  • ptr_msg->ptr->tag.num 访问另一个Msg结构体中tag结构的num成员.
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值