打印
[C语言]

求解有关一句结构体和数组指针的代码解释

[复制链接]
859|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengbiao1210|  楼主 | 2017-3-12 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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 | 只看该作者
struct Sample {
    int a;
    int b;
    int c
};

int arr[3];
假设有结构体变量 _sample 和整形数组 arr[3] 。
_sample 中有三个成员变量 a,b,c ,均为整形。
结构体变量 _sample 在内存中存放方式其实就是 a,b,c 三个成员变量按顺序排列,和数组 arr[3] 实际上一样。
可以把数组 arr[3] 强制转换为结构体 Sample 。
struct Sample* psample = (struct Sample*)(arr);
这时,结构体变量内的成员 a,b,c 分别为 arr[0],arr[1],arr[2] 。

使用特权

评论回复
5
daibumeikuai| | 2017-3-12 17:37 | 只看该作者
pengbiao1210 发表于 2017-3-12 14:48
相当于MsgHeadDef_t 结构体的首地址指向了数组[1]的地址,然后结构体里的参数就依次指向数组[2.3.4...]这 ...

要注意结构体和数组在内存存放上是有区别的,得看结构体成员及数组元素怎么定义,你的数组是结构体数组还是一般类型数组,简单的类型可以。结构体涉及到内存对齐,元素地址不一定连续,而数组是开辟了一个连续空间存放。可以查下结构体内存对齐,另外还有大小端模式。  这里没有上下文体现这个结构体定义,不建议类型差距很大的数据进行强制转换。  可能不同编译环境得到结果会不同。

使用特权

评论回复
6
renxiaolin| | 2017-3-13 11:49 | 只看该作者
这个sSendDataBuf 的定义是啥,你给出来呀

使用特权

评论回复
7
flyywq| | 2017-3-16 09:11 | 只看该作者
强制转换为指针

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

15

帖子

0

粉丝