考虑下面非常简单的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int* a = (int*) malloc(10 * sizeof(int));
printf("a = %p, a+1 = %p", a, a+1);
return 0;
}
输出是这样的:
a = 0x127f190, a+1 = 0x127f194
由于 an 的大小int
是 4 个字节,我从上面的结果中假设指针值是我的 RAM 内存上一个字节的索引。因此a+1
实际上增加了a
by sizeof(int) = 4
(bytes) 的值。那是对的吗?
如果是,那么为什么我要从我的程序中获取 32 位内存地址?这台机器是 64 位的,运行 64 位版本的 Ubuntu。如何让程序打印完整的 64 位地址?我必须用特殊标志编译它吗?