C语言二级指针问题: int x=0x100100; char *p=(char *)&x; *p

C语言二级指针问题:intx=0x100100;char*p=(char*)&x;*p='A';//等价0x41p=p+2;*p=50;//等价0x32printf("%... C语言二级指针问题: int x=0x100100; char *p=(char *)&x; *p='A';//等价0x41 p=p+2; *p=50;//等价0x32 printf("%x\n",x); 结果是320141,怎么解释? 展开
 我来答
揭凌晴9g
2014-03-07 · TA获得超过102个赞
知道答主
回答量:34
采纳率:0%
帮助的人:32.8万
展开全部
x的初值是0x100100也就是一个16进制数,指针p指向A的首地址,根据16进制数,此时p指向的是开头的0x10,然后通过指针赋值,此时的x是0x410100。同理指针移位2位,指向末端的0x00。赋值过后,x == 0x410132,把x拆分成3个字节,0x41 0x01 0x32。 由于我们目前用的计算机大部分是小端对齐。高低位存储的机制(具体一时间我忘记怎么解释,可以自己百度大小端对齐看看),所以实际在内存中是这样的0x320141(也就是按字节反过来),用%x输出16进制数,所得为问题所示结果。
追问
每次指针指向地址都是两位吗?
追答
这里的指针指的是一个字节
8位一个字节
比如你的0x100100换成2进制就是0001 0000 ,0000 0001, 0000 0000。这里的一个数字是1位,4位是一个字,8位是一个字节。你的指针式char *型,char型是一个字节的,所以p++是指针后移一个字节。如果你的问题里指针是int *,那就要移动4个字节了,结果就会不一样。如果可以的话,学习一下各个类型变量所占内存空间也是挺好的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式