这个程序的结果是怎么得出来的?
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/18 09:57:43
这个程序的结果是怎么得出来的?
#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);
}
#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);
}
这个程序考察的是union联合和结构的存储问题.结构的存储很容易理解,就是结构体内部元素所占空间的和.这里的byte类型,就是int类型的4个字节加上char类型的1个字节.共5个字节空间.在union中,是内部的所有元素共同占用一个存储空间,空间的大小是元素里面最大元素所占空间的整数倍.联合r中,long j是最长的,占用8个字节空间.在主函数中,给j元素赋值,实际上union中也就只有这个数值了.输出时,以%x十六进制输出整数,所以就输出98765432.而由于前面的赋值,y元素 是空的,没有值,所以就输出0.
再问: 不对,long型是占四个字节的,当然联合r中确实是8个字节空间,是因为int[2],我对内存中这些数是怎样存储的,可否详细告知。 跪求。。。 你讲的有些晦涩我有些难懂。。。
再问: 不对,long型是占四个字节的,当然联合r中确实是8个字节空间,是因为int[2],我对内存中这些数是怎样存储的,可否详细告知。 跪求。。。 你讲的有些晦涩我有些难懂。。。