C语言二级指针问题: int x=0x100100; char *p=(char *)&x; *p
答案:2 悬赏:30 手机版
解决时间 2021-01-24 17:11
- 提问者网友:做自己de王妃
- 2021-01-24 10:41
C语言二级指针问题: int x=0x100100; char *p=(char *)&x; *p='A';//等价0x41 p=p+2; *p=50;//等价0x32 printf("%x\n",x); 结果是320141,怎么解释?
最佳答案
- 五星知识达人网友:一叶十三刺
- 2021-01-24 12:16
x的初值是0x100100也就是一个16进制数,指针p指向A的首地址,根据16进制数,此时p指向的是开头的0x10,然后通过指针赋值,此时的x是0x410100。同理指针移位2位,指向末端的0x00。赋值过后,x == 0x410132,把x拆分成3个字节,0x41 0x01 0x32。 由于我们目前用的计算机大部分是小端对齐。高低位存储的机制(具体一时间我忘记怎么解释,可以自己百度大小端对齐看看),所以实际在内存中是这样的0x320141(也就是按字节反过来),用%x输出16进制数,所得为问题所示结果。
全部回答
- 1楼网友:逃夭
- 2021-01-24 13:24
int x=0x100100; // 声明int型变量x, 对于32位机来言,这个x变量占了4个字节(32bit)
char *p=(char*)&x;//p指针指向x的地址,注意p是char型的(占1个字节,8bit),也就是说p实际是指向x的低8位"0x00 "
*p='a' //将x低8位"0x00 "改成"0x41", 因为a的ascii码是0x41
p=p+2;// p的指针移动2个字节(即指向x的第三个字节 0x10,)
*p=50;// 将x高8位"0x10 "改成"0x32"
printf("%x\n",x);// 打印x值
望采纳!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯