c - 指针值是什么意思?

标签 c pointers

考虑下面非常简单的代码:

#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/

相关文章:

c++ - 防止 C++(或 C++0x)中的 header 爆炸

c++ - 在指针中列出元素时出现问题

c - fork() 之前的 Printf 被打印两次

c - c中的段错误(核心转储)

c - 通过 C 中的套接字发送和接收文件

arrays - 将指针数组复制到设备内存并返回(CUDA)

c++ - C++中的内存分配顺序

python - 使用 pytables/hdf5 实时分析模拟数据

c - math.h 头文件在 AIX 上不起作用

c++ - 删除不完整类型的对象