请教一个结构体, 指针,还有数组的问题

有一个结构体变量sysstruct{······}sys;现在定义一个指针变量unsignedint*p,p=(unsignedint*)sys;memcpy(&data... 有一个结构体变量sys
struct {······}sys;
现在定义一个指针变量 unsigned int*p,
p=(unsigned int*)sys;
memcpy(&datarecieve[0],&(p[slaveraddress]),30)
最后一句是内存复制语句,我有点困惑的是里面的参数,&(p[slaveraddress])是什么意思,p是指向结构体变量sys的指针,这里突然来一个p[slaveraddress]是什么意思,怎么会有个数组呢,这个数组名怎么会是p呢,困惑,还望高手给予解答,先谢谢啦
展开
 我来答
White_MouseYBZ
2013-07-29 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6622万
展开全部
可以的。当指针指向sys时,就把sys的首地址赋值给了p;但赋值语句p=(unsigned int*)sys;中sys前的(unsigned int*)把指针p强制成为无符号int型。这样p的指向是sys,但它却不再具有sys的性质而是具有了unsigned int性质,那么p[slaveraddress]就是从sys的首地址开始,以unsigned int的空间大小为单元(通常是4字节)的第slaveraddress个(从0开始数)元素。可能还没有理解,举个例子:int a[10]={1,2,3,5},*p=a;,那么p[0]和a[0]等价=1、p[3]和a[3]造价=5。就是说一个指向具体的指针,可以当数组的首地址用!
追问
谢谢你的回答,那假如说sys的结构体成员如下:
struct
{
unsigned int a;

char b[8]

unsigned long c;

unsigned d;

} sys;
int *p;
p=(unsigned int*)sys;
那p[3]是不是等价于 sys.c 呢,请赐教
追答
对。因为a是4字节,是p[0];b有8个字节,是这p[1]和p[2];c也是4字节,刚好是p[3]……
不过有个问题要注意一下:那就是你这里结构体内部的变量的字节数的排列刚好没有空闲的,是一个接一个的,而实际上有时如果某个变量所占字节数不是4的倍数,那就要进行所谓的“对齐”排列,把不是4的倍数的变量扩展成4的倍数,据说这样可以提高访问时效。而且还与编译器有关,有的编译器很“聪明”,会把两个双字节short型变量当一个只占4个字节而不是8个,但有的编译器却傻到让它们占8个;如果是其中有一个3字节的数组,那当然只好占4字节了……
灰色110
2013-07-29 · TA获得超过185个赞
知道小有建树答主
回答量:289
采纳率:100%
帮助的人:261万
展开全部
这里要考虑字节对齐的事的

另外,这里p[3]其实相当于b[4]~b[7]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式