当前位置: 首页 > news >正文

指针变量存放在哪?

指针的存储位置取决于其声明方式和作用域,以下是详细分析:

1. 栈(Stack)

  • 局部指针变量:在函数内部声明的指针(非静态),作为局部变量存储在栈中。
    void func() {int *p; // p本身存储在栈中int x = 10;p = &x;  // p指向栈上的变量x
    }
    

2. 堆(Heap)

  • 动态分配的指针变量:通过 mallocnew 等动态分配内存时,指针变量本身仍可能在栈或静态区,但其指向的地址在堆中。
    int *p = (int*)malloc(sizeof(int)); // p在栈中,指向堆中的内存
    

3. 静态/全局存储区

  • 全局或静态指针:在函数外定义的全局指针,或使用 static 关键字声明的指针,存储在静态数据区。
    static int *static_ptr;  // 静态指针,存储在静态区
    int *global_ptr;         // 全局指针,存储在静态区
    

4. 寄存器(Register)

  • 编译器优化:频繁使用的指针可能被编译器优化到寄存器中,但无法直接通过代码控制。
    register int *p; // 过时的语法,现代编译器自动优化
    

关键区分

  • 指针变量本身:存储位置由声明方式决定(栈、静态区等)。
  • 指针指向的数据:存储位置取决于如何分配(如 &x 在栈,malloc 在堆)。

示例对比

int global_var = 5;       // 全局变量(静态区)
int *global_ptr = &global_var; // global_ptr在静态区,指向静态区void example() {int local_var = 10;          // 栈int *local_ptr = &local_var; // local_ptr在栈,指向栈int *heap_ptr = malloc(sizeof(int)); // heap_ptr在栈,指向堆static int *static_ptr;       // static_ptr在静态区
}

总结

  • :函数内的局部指针。
  • :指针指向的动态分配内存(但指针变量本身可能在栈)。
  • 静态区:全局/静态指针。
  • 寄存器:编译器优化的临时存储。

理解指针的存储位置需明确区分指针变量本身它指向的数据,两者可能位于不同区域。

http://www.xdnf.cn/news/222139.html

相关文章:

  • 深度学习·经典模型·SwinTransformer
  • ISME|原生生物,顶刊是如何研究的
  • 网工笔记-传输层
  • 插值算法 - 双三次插值(Bicubic Interpolation)
  • 【无标题】四色定理研究团队的构建与实施路径——跨学科建模、编程与理论拓展的全流程方案
  • 实现一个简单回调列表
  • 代理对象的mock
  • 数据库所有知识
  • 随机游走之 个人的简单理解
  • 通义千问Qwen3全维度解析
  • Windows系统下,导入运行 RuoYi-Vue3 项目
  • 批量打印工具使用全攻略
  • 深度循环神经网络
  • 链表反转操作经典问题详解
  • python之数字类型的操作
  • 【linux网络】网络基础概念
  • 从零构建Dagster分区管道:时间+类别分区实战案例
  • 企业的AI转型:生死时速的进化之路
  • 再学GPIO(三)
  • 系统设计中三高指什么
  • OpenGL学习笔记(PBR)
  • LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding
  • 大模型与MCP:重塑AI应用的新篇章
  • 手动安装OpenSSL1.1.1
  • 【深度解析】YOLOE登场:CNN路线的开放世界新答卷,超越YOLO-World与Transformer
  • 去哪儿旅行 Bella Pre 分析
  • (003)Excel 在滚动的时候,保持标题栏可见
  • 论文阅读的三个步骤
  • nextcloud私有网盘系统搭建
  • 【AI提示词】第一性原理