共用体数组成员的赋值

#include<stdio.h>
union u
{
int i;
char c[2];
};
void main()
{
union u x;

x.c[0]=13;
        //它的赋值本质是在4个字节(因为有int i;语句,已经将i开辟了4个字节的空间)的空间里的左边第一个字节存放整型数10,即在???? ????  ???? ????  ???? ????  **???? ????**的最后8个?表示的字节上赋值为13,
        //为什么上面的4个字节是问号呢?因为变量i没有赋值,是随机数。当完成x.c[0]后,变成了???? ????  ???? ????  ???? ????  0000 1101,

x.c[1]=0;
       //此句赋值完后,4个字节的空间变成了:???? ????  ???? ????  0000 0000,  0000 1101,因此当访问变量i时,访问的是上面4个字节的值:???? ????  ???? ????  0000 0000,  0000 1101,因为这4个字节中前面的两个 字节没有赋值,所以是随机数,每次访问变量i时,都会出现不一样的数//值。但是每次访问后2个字节的空间时,都不会变化,都是:左边第一个字节的是是10,即x.c[0],第二个字节的值是1, 即x.c[1]的值。
       数组赋值时顺序c[0]=13  c[1]=0   
                按数组的顺序数值应该是13 0
      但按内存字节存数规则 c[0]=13  c[1]=0
                即为  c[0] :**** ****   **** ****    **** ****   00001101 
                       c[0]  c[1]  :**** ****   **** ****    00000000   00001101
                                                                              0                 13
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值