这是我有一个非常基本的内存地址的问题:基本内存地址混乱
这里是我的代码片段:
int *i = &a[0];
printf("ptr i = %p, i = %x, (i+1) = %p, (i+1) = %x\n", i, i, i+1, i+1);
输出如下:
ptr i = 0x7fff5fbff700, i = 5fbff700, (i+1) = 0x7fff5fbff704, (i+1) = 5fbff704
这是一个32位内核。
我真的不明白的是以下几点:
地址0x7fff5fbff700
和地址0x7fff5fbff704
应该由32位或4个字节不同。
如果我考虑在地址0x7fff5fbff700
为1字节的每个“元素”,然后是的,我可以看到两个地址由4字节如何不同,但如果是这样的话则地址0x7fff5fbff704
将是12×4 = 48bytes 。这怎么可能呢??
我跑了它在Linux中,这是我所得到的:
ptr i = 0xffff82cc, i = ffff82cc, (i+1) = 0xffff82d0, (i+1) = ffff82d0
如果我尝试打印第(i + 1)-1,它总是给为0x1
,但我不明白0xffff 82cc和0xffff 82d0如何相差32位或4字节!
0xffff82cc = FFFF 1000 0010 1010 1010 0xffff82d0 = FFFF 1000 0010 1011 0000
请解释
甚至不知道这意味着什么......这是什么意思? – user999755
谢谢...我已经接受了我以前的问题的答案...我一直感谢已回复的用户...没有意识到我应该有upvoted或接受..谢谢 – user999755
您的二进制值是错误的顺便说一句。 '82cc' ='1000 0010 1100 1100'和'82d0' ='1000 0010 1101 0000' – JasonD