You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位系统中C语言指针的内存占用与存储地址疑问

64位系统下指针的内存占用与地址打印问题
  • 指针作为一个变量,在64位系统下确实会占用8个连续的字节内存块,逻辑和4字节的int变量完全一致——任何数据类型的变量,都会在内存里占据对应大小的连续存储空间,指针也不例外。
  • 当你打印指针变量自身的地址时(比如用printf("%p", &ptr);),这个地址就是它所占用的8个连续字节的基地址(起始地址)。要是你打印的是指针存储的目标地址(printf("%p", ptr);),那是它指向的另一块内存的起始地址,和指针自己的内存块没关系。

给你一段测试代码,能直观看到区别:

#include <stdio.h>

int main() {
    int num = 10;
    int *ptr = &num;
    
    // 打印指针变量自身的地址(8字节内存的基地址)
    printf("指针ptr自身的地址:%p\n", &ptr);
    // 打印指针指向的目标地址
    printf("ptr指向的num的地址:%p\n", ptr);
    // 查看指针变量的大小
    printf("ptr的占用大小:%zu字节\n", sizeof(ptr));
    return 0;
}

运行后你会发现:&ptr是指针自己占据的内存块的起始地址,ptr是它存储的num的地址,而sizeof(ptr)会输出8,验证了64位系统下指针的大小。

内容的提问来源于stack exchange,提问作者hell_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:12:06