希望看到的高手帮帮忙解决下小弟的问题
#include <stdio.h>union un
{
int i;
char c[2];
}
main()
{
union un x;
x.c[0]='10';
x.c[1]='1';
printf("\n%d",x.i);
}
有人能帮我解释下这个程序 课本练习题的给出的答案是266 但是上机运行给出的是不定值啊 谢谢
/* 我认为作者可能把写错了x.c[0]='10' 和x.c[1]='1'应该为x.c[0]=10 和x.c[1]=1 对c[0]赋值10相当把00001010赋给i的低8位 对c[1]赋值1相当把00000001赋给i的高8位 这样i就是 00000001 00001010变成十进制就是266了 */ #include <stdio.h> union un { short int i; //short占两个字节相当于c语言中的占两字节int char c[2]; //占两个字节 }; int main(void) { union un x; x.c[0]='10'; //该地方只存0字符对应整型48二进制数为00110000(可改为x.c[0]=10) x.c[1]='1'; //对应于整型49二进制数为00110001(可改为x.c[1]=1) printf("\n%c,\n%p,%p\n",x.c[0],&x.c[0],&x.c[1]); //输出c[0]的值, 输出x.c[0]和x.c[1]的地址从输出的地址可知, //低地址位0012FF7C值为48(00110000),高地址为0012FF7D值为49(00110001), //所以在内存地址0012FF7C-0012FF7D中为(0011000000110001) //再看CPU解释顺序是大端模式还是小端模式 //若小端模式解释为整型变量值(0011000000110001)12592 printf("\n%p,%d\n",&x.i, x.i); //若大端模式解释为整型变量值(0011000100110000)12337 return 0; }