union的用法。来个人解答一下。谢谢大家了

main() {union { int i[2]; long k; char c[4]; } r,*S=&r; s->i[0]=0x39;s->i[1]=0x38; printf("%x\n",s->c[0]); } 谁能详细给我解答一下怎么来的。答案是39。没看懂答案说什么高8位低8位
kathria
浏览 1874回答 1
1回答

asd8532

int类型的变量占2/4个字节,1个字节占8个bit位,所以s->i[0]=0x39,内存中的二进制值应该是00111001 00000000然后s->i[1]=0x38,内存中的值为:00111000 00000000而一个char类型的变量只占1个字节,所以字符数组C中的值的对应情况应该是c[0] = 00111001 =39c[1] = 00000000 = 0c[2] = 00111000 =38c[3] = 00000000 = 0所以输出c[0]的值就是00111001,转换成16进制就是39(%x的意思就是16进制显示)
打开App,查看更多内容
随时随地看视频慕课网APP