[C语言] 求解有关一句结构体和数组指针的代码解释

[复制链接]
 楼主| pengbiao1210 发表于 2017-3-12 10:16 | 显示全部楼层 |阅读模式

MsgHeadDef_t *ptempMsgHead = (MsgHeadDef_t *)(sSendDataBuf + 1);
MsgHeadDef_t        是一个结构体
sSendDataBuf 是一个数组,
请问这句话是什么意思?
daibumeikuai 发表于 2017-3-12 14:37 | 显示全部楼层
数组名看作首元素地址,数组名+1就是 ssend[1]元素的 地址,然后进行(MsgHeadDef_t *)指针强制转换,赋值给ptempMsgHead指针。
 楼主| pengbiao1210 发表于 2017-3-12 14:48 | 显示全部楼层
daibumeikuai 发表于 2017-3-12 14:37
数组名看作首元素地址,数组名+1就是 ssend[1]元素的 地址,然后进行(MsgHeadDef_t *)指针强制转换,赋值 ...

相当于MsgHeadDef_t 结构体的首地址指向了数组[1]的地址,然后结构体里的参数就依次指向数组[2.3.4...]这样,那么只要结构体的参数值发生改变时,数组里的内容也会相应的改变?同理数组里内容改变 结构体参数值也会改变?是这样吗
Gameparkwing 发表于 2017-3-12 15:42 | 显示全部楼层
  1. struct Sample {
  2.     int a;
  3.     int b;
  4.     int c
  5. };

  6. int arr[3];
假设有结构体变量 _sample 和整形数组 arr[3] 。
_sample 中有三个成员变量 a,b,c ,均为整形。
结构体变量 _sample 在内存中存放方式其实就是 a,b,c 三个成员变量按顺序排列,和数组 arr[3] 实际上一样。
可以把数组 arr[3] 强制转换为结构体 Sample 。
  1. struct Sample* psample = (struct Sample*)(arr);
这时,结构体变量内的成员 a,b,c 分别为 arr[0],arr[1],arr[2] 。
daibumeikuai 发表于 2017-3-12 17:37 | 显示全部楼层
pengbiao1210 发表于 2017-3-12 14:48
相当于MsgHeadDef_t 结构体的首地址指向了数组[1]的地址,然后结构体里的参数就依次指向数组[2.3.4...]这 ...

要注意结构体和数组在内存存放上是有区别的,得看结构体成员及数组元素怎么定义,你的数组是结构体数组还是一般类型数组,简单的类型可以。结构体涉及到内存对齐,元素地址不一定连续,而数组是开辟了一个连续空间存放。可以查下结构体内存对齐,另外还有大小端模式。  这里没有上下文体现这个结构体定义,不建议类型差距很大的数据进行强制转换。  可能不同编译环境得到结果会不同。
renxiaolin 发表于 2017-3-13 11:49 | 显示全部楼层
这个sSendDataBuf 的定义是啥,你给出来呀
flyywq 发表于 2017-3-16 09:11 | 显示全部楼层
强制转换为指针
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

8

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部