为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2022-05-13 14:11:02
#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]);}
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

共用体
是一个
对于同一段数据
以多种不同的角度去看待的用的。
共用体长度
是4字节,也就是
你是怎么去看待这4字节里的数据的

s->i[0]=0x39;
/*
按照整型成员的类型赋值
*/
s->i[1]=0x38;
是不会被替换掉的。
这个共用体是由两个int组成的长度。
你可以认为是
前两个字节的值是0x39后两个字节的值是0x38

查看完整回答
反对 回复 2022-05-16
?
慕森王

TA贡献1777条经验 获得超3个赞

我感觉你这个问题,应该是你没理解联合体的含义,你这个联合体里的元素是i[2]、k、c[4],在内存中的某一时刻他们三个中只能存在一个,而你的实验写的是其中的一个元素i[2]的子元素,所以对于联合体来说他还是他的i【2】元素,你没分清联合体的元素。

查看完整回答
反对 回复 2022-05-16
  • 2 回答
  • 0 关注
  • 612 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信