永发信息网

C语言:例子解释,关于union

答案:3  悬赏:0  手机版
解决时间 2021-04-03 16:31
C语言:例子解释,关于union
最佳答案
union是联合的意思,也就是内部的变量是共用同一个存储空间的,以变量中存储空间最大的为整个union的占用空间。

这个union中i是int型的占用4个字节,char x[2]是两个字节,那么这个union就占用4个字节。
假设分别是byte3,byte2,byte1,byte0。

如果用a.x[0]操作的就是byte0(对应16进制数是0xa),用a.x[1]操作的就是byte1(对应16进制数是0x1),byte3,byte2都没有被赋值(在调试已经初始化为0)。

读取a.i 时,就是对byte3,byte2,byte1,byte0同时操作,组合成16进制数就是0x0000010a,也就是266.
全部回答
计算机对于int采用高位在后的存储方式,也就是int 的4个字节,第一个字节是最低位,第四个字节是最高位。
union的x 成员只是用了其中2个字节,就是第一个和第二个。当第一个付10,第二个付1的时候,对于int成员来说就是 1 * 256 + 10 (因为一个字节最大为FF即255,进位后为256),结果就是266.
这边需要注意的是你应该是在debug 模式下执行的,这时候为给a付初始值0,如果在release模式下,a不一定有初始值0,这时候因为第三位和第四位未知,所以输出也会未知。

可能的值是266(小尾) 或 17432576 (32 位大尾序) 或 2561(16位大尾)
 
参考下面的代码#include
union {  
      int i;  
      char x[2];  
}a; 
int main(void)  
{  char *p;
 int i = 0;
   a.x[0] = 10;  
   a.x[1] = 1;  
   printf("%d ",a.i);  
   
   printf("联合a共占 %d 个字节 ",sizeof(a));
   
   p = (char *)(&a);
   
   for(i = 0; i < sizeof(a); ++i)
   {
    printf("0x%08X --------", p + i);
    printf("%02X ", *(p+i));
   }
   
   return 0;  
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求电视剧,现代片子,里面的人物事情和三国差不
单选题下列叙述是小明做完铜、锌原电池的实验
义乌市佛堂镇初级中学怎么样?
暧昧的句子情侣,古代除了鸳鸯用什么动物比作
38号鞋对应是24码吗?
成年人骨髓腔中的什么是什么色
关于小草坚韧不屈的诗句带诗人
地址翻译成英文怎么写,上海的地址怎么翻译成
.造成我国众多地区出现严重旱灾的原因有很多
一个男生跟你说他喜欢一个女生,意味着什么
安全通道标语竖着写的,买了个红包,背面要写
重装系统后出现verifying dmi pool data
“90后”作家真的把纯文学丢了吗
从太仓汽车站到上海长风海洋公园怎么去
单选题分子和原子的本质区别是A.质量和体积的
推荐资讯
芮的含义是什么意思,芮是什么意思
我信耶稣,为什么听到他说救不了我了
汽车销售晨会激励口号
单选题下列关于原生质的叙述中不正确的是A.原
祝别人百年好合的句子,祝福恋人百年好合的语
水印相机地址怎么会显示外国地址
怎么辨别自己的手机是不是4g呢
一个很早的单机游戏,一个人顺着剧情闯关。通
苏州园区哪些娱乐场所小费是4块的场子?
G2O峰会在杭州-
厨房油烟排不净怎么办
现有下列反应,据两式判断,还原性由强到弱的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?