这是我遇到的一个非常基本的内存地址问题:
这是我的片段:
int *i = &a[0];
printf("ptr i = %p, i = %x, (i+1) = %p, (i+1) = %x\n", i, i, i+1, i+1);
输出如下:
指针 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
请解释