当前位置: 代码迷 >> C语言 >> 共用体问题
  详细解决方案

共用体问题

热度:22   发布时间:2007-09-05 20:36:30.0
共用体问题

程序如下
要先申明函数的
#include "stdio.h"
union un
{
int t;
char c[2];
}
main()
{
union un x;
x.c[0]=10;
x.c[1]=1;
printf("\n%d",x.i);
}

答案是266 说是共用体c[0]在低字节,c[1]在高字节, 所以x.i为266 我不知道什么是高字节 和字节 为什么x.i就要等于266呢??? 求教


----------------解决方案--------------------------------------------------------

共用体故名思义共同使用同一段内存空间,更具你的题目un占用内存为2个字节。
00H 01H
[ ][ ] <- 一个[]表示1个字节
[ t ] <- t占用2个字节
[c[0]][c[1]] <- c[0]和c[1]个占一个字节
然而内存是从低地之到高地址分布的,由上图可以知道。
那么你为c[0]和c[1]复制以后看看内存分布情况(我们知道10的二进制是00001010,1的二进制是00000001,这里写8位二进制是因为一个字节占用8位)
[00001010][00000001] <- 这个就是c[0]和c[1]的分布
然后再看t,t是占两个字节,分为高8位和低8位,根据低地址填地位,高低址填高位,那么c[0]对应t的低地址而c[1]对应t的高地址,分布如下
高8位 低8位
t [00000001 00001010]
将这个二进制化成十进制,就是266了。

[此贴子已经被作者于2007-9-5 20:55:47编辑过]


----------------解决方案--------------------------------------------------------
以下是引用yuki在2007-9-5 20:50:55的发言:

共用体故名思义共同使用同一段内存空间,更具你的题目un占用内存为2个字节。
00H 01H
[ ][ ] <- 一个[]表示1个字节
[ t ] <- t占用2个字节
[c[0]][c[1]] <- c[0]和c[1]个占一个字节
然而内存是从低地之到高地址分布的,由上图可以知道。
那么你为c[0]和c[1]复制以后看看内存分布情况(我们知道10的二进制是00001010,1的二进制是00000001,这里写8位二进制是因为一个字节占用8位)
[00001010][00000001] <- 这个就是c[0]和c[1]的分布
然后再看t,t是占两个字节,分为高8位和低8位,根据低地址填地位,高低址填高位,那么c[0]对应t的低地址而c[1]对应t的高地址,分布如下
高8位 低8位
t [00000001 00001010]
将这个二进制化成十进制,就是266了。


厉害!!又学到不少````


----------------解决方案--------------------------------------------------------
什么机器啊?现在的sizeof(int)不都是等于4了么?
----------------解决方案--------------------------------------------------------
  相关解决方案