这个程序的结果是怎么得出来的?#includestruct byte{int x;char y;};union{int i[2];long j;char m[2];struct byte d;}r,*s=&r;main(){s->j=0x98765432;printf("%x\t%x\n",s->d.x,s->d.y);}

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/18 14:42:24
这个程序的结果是怎么得出来的?#includestructbyte{intx;chary;};union{inti[2];longj;charm[2];structbyted;}r,*s=&r;mai

这个程序的结果是怎么得出来的?#includestruct byte{int x;char y;};union{int i[2];long j;char m[2];struct byte d;}r,*s=&r;main(){s->j=0x98765432;printf("%x\t%x\n",s->d.x,s->d.y);}
这个程序的结果是怎么得出来的?
#include
struct byte
{
int x;
char y;
};
union
{
int i[2];
long j;
char m[2];
struct byte d;
}r,*s=&r;
main()
{
s->j=0x98765432;
printf("%x\t%x\n",s->d.x,s->d.y);
}

这个程序的结果是怎么得出来的?#includestruct byte{int x;char y;};union{int i[2];long j;char m[2];struct byte d;}r,*s=&r;main(){s->j=0x98765432;printf("%x\t%x\n",s->d.x,s->d.y);}
这个程序考察的是union联合和结构的存储问题.结构的存储很容易理解,就是结构体内部元素所占空间的和.这里的byte类型,就是int类型的4个字节加上char类型的1个字节.共5个字节空间.在union中,是内部的所有元素共同占用一个存储空间,空间的大小是元素里面最大元素所占空间的整数倍.联合r中,long j是最长的,占用8个字节空间.在主函数中,给j元素赋值,实际上union中也就只有这个数值了.输出时,以%x十六进制输出整数,所以就输出98765432.而由于前面的赋值,y元素 是空的,没有值,所以就输出0.