请问0x39和0x38到底是什么意思?还有这个程序的答案是怎么求出来的?

#include<stdio.h>
main()
{
union{short i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39; s->i[1]=0x38;
printf("%x\n",s->c[0]);
}


繁星coding
浏览 619回答 2
2回答

四季花海

共用体是一个对于同一段数据以多种不同的角度去看待的用的。共用体长度是4字节,也就是你是怎么去看待这4字节里的数据的s->i[0]=0x39;/*按照整型成员的类型赋值*/s->i[1]=0x38;是不会被替换掉的。这个共用体是由两个int组成的长度。你可以认为是前两个字节的值是0x39后两个字节的值是0x38

慕森王

我感觉你这个问题,应该是你没理解联合体的含义,你这个联合体里的元素是i[2]、k、c[4],在内存中的某一时刻他们三个中只能存在一个,而你的实验写的是其中的一个元素i[2]的子元素,所以对于联合体来说他还是他的i【2】元素,你没分清联合体的元素。
打开App,查看更多内容
随时随地看视频慕课网APP