发布网友 发布时间:2022-04-24 16:30
共3个回答
热心网友 时间:2023-10-22 18:08
首先这个是共用体,所以各个变量公用一段内存,你s->i[0]=0x39;s->i[1]=0x38;赋值以后,对应的该段内存最后占8个字节(两个int,根据编译器来确定)的区域被赋值,char型占一个字节,你输出c[0],也就是第一个字节的数据被输出。而整形数据占的4个字节,在存储时是低位在前的,比如0x11121314.在存储时会被先读取0x14放在第一个字节0x13第二个字节,依次下去,所以0x39相当于在前四个字节的地址中存为0x39,0x00,0x00,0x00.这样你读取第一个字节的时候就是0x39了。
热心网友 时间:2023-10-22 18:08
union {
int i[2];
long k;
char c[4];
}r,*s=&r;定义了此共同体,它的大小为此共同体内占字节最大的为此共同体大小。
其次,共同体是共享内存的使用方式,所以你在共同体内不管怎么赋值,都会给其他的数据赋值。
热心网友 时间:2023-10-22 18:09
答案是0x39 ,我就奇怪了 楼主 不喜欢初始化,这样是个很危险的习惯。不对内存进行memset ,会导致 程序的结果千奇百怪。 我看了你2个提问关于共同体的都是有不初始化的习惯。追问呃,这个是我在做题……呃 不是我写的程序……