考虑下面非常简单的代码:
#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
因为 int
的大小是 4 个字节,我从上面的结果假设指针值是我的 RAM 内存中 byte 的索引。因此,a+1
实际上将 a
的值增加了 sizeof(int) = 4
(字节)。对吗?
如果是,那为什么我从我的程序中得到 32 位内存地址?这台机器是 64 位的,运行 64 位版本的 Ubuntu。如何让程序打印完整的 64 位地址?我必须用特殊标志编译它吗?
最佳答案
你的指针是正确的。传统上,内存是按字节组织和寻址的,指针指向它们指向的任何内容的第一个字节(编辑:它们不必,但在通常的平台和编译器上它们会这样做)。
您看不到“64 位”指针仅仅是因为输出去除了前导 0:-) 如果您执行 sizeof(a),您很可能会在 32 位系统上得到“4”,并且64 位系统上的“8”。
关于c - 指针值是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132764/