歌乐电子一道很简单的笔试题目竟然搞错了!!!



题目打开图片就可以看到


void main(void)

{union unt

{ unsigned char uc[4];

unsigned int ui; };

union unt t;

t.ui=0x12345678;

printf("%d\n",t.uc[1]);}



共同体在嵌入式开发中是很少用的,所以在复习的时候也没有去仔细去看,百度了一下,共同里里面的变量用的是同一个存储空间,也就是说,我在共同体里面虽然声明了两个变量,uc[4]和int ui,但是实际上他们的地址是一样的。在这个题目里面uc数组用的是四个字节,而ui 整型也刚好是四个字节,所以初始化了ui相当于也初始化了uc。如果把数组类型改成int,则这个共同体所占用的空间就是4*4=16个字节了,“各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。”具体上百度百科可以看讲的很清楚。

而大端和小端则是处理器存储数据的结构问题,大端是高位数据存储在低位地址,而小端高位数据存储在高位地址,所以,从这一题可以看出uc[0]==0x12,uc[1]==0x34,uc[2]==0x56,uc[3]==0x78,所以答案应该是B,很遗憾,看了下昨天的考卷我竟然选的是A,问题竟然是把数组的脚标给搞错了,很是遗憾,吸取教训吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值