程序如下
要先申明函数的
#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编辑过]
共用体故名思义共同使用同一段内存空间,更具你的题目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了。
厉害!!又学到不少````