数组名

[复制链接]
3966|4
 楼主| hjs1618 发表于 2013-3-15 08:57 | 显示全部楼层 |阅读模式
void main (void)
{
     uchar arr[10]={1,2,3};
    volatile ushort _y8;
   _y8 = *((uchar*)&arr);---------------------_y8被赋值为0x0001;
   _y8 = *(&arr);             ---------------------_y8被赋值为0x0001;   这为什么是这个值?&arr  这个是指向整个数组的,应该是取整个数组的值,结果应该是0x0201
}
airwill 发表于 2013-3-15 09:08 | 显示全部楼层
想要结果是 0x0201, 你就:

_y8 = *((ushort*)arr);
dirtwillfly 发表于 2013-3-15 09:16 | 显示全部楼层
楼主的ushort和uchar貌似位数不一样,强制格式转换会有一些问题
ayb_ice 发表于 2013-3-15 10:24 | 显示全部楼层
*(&arr);
意思是取字节数据,因为arr本来就是字节数组,将结果扩展成16位数再输出,就是将arr[0]扩展成16...
 楼主| hjs1618 发表于 2013-3-15 11:16 | 显示全部楼层
&arr这个表达式中的arr是指向整个数组,&arr是指向整个数组的指针,当&arr+1,就相当于移动数组长度,指向下一个内存,那对*(&arr)取值,这时应该取回来的时整个数组的值吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:单片机学习交流群:19131564  欢迎加入

13

主题

515

帖子

1

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