当前位置: 首页 > 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在静态区
}

总结

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

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

相关文章:

  • 香港科技大学广州|智能制造学域硕、博研究生招生可持续能源与环境学域博士招生宣讲会—四川大学专场!
  • Kafka 消息可靠性深度解析:大流量与小流量场景下的设计哲学
  • 计算机毕业设计--基于深度学习(U-Net与多尺度ViT)的车牌模糊图像修复算法设计与实现(含Github代码+Web端在线体验界面)
  • 62.微服务保姆教程 (五) Seata--微服务分布式事务组件
  • Samba-系统集成
  • java web 过滤器
  • 好未来golang后端开发
  • 【Linux】第十五章 调度未来任务
  • 洛谷 B3644:【模板】拓扑排序 / 家谱树 ← 邻接表
  • elementui里的el-tabs的内置样式修改失效?
  • LeetCode - 02.02.返回倒数第 k 个节点
  • 自定义指令input中前面不能输入空格
  • WPF TextBlock控件性能优化指南
  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • Docker容器资源控制--CGroup
  • 强化学习之基于无模型的算法之时序差分法
  • Python 数据智能实战 (2):LLM 工具箱搭建 - API/库实操与高效 Prompt 设计入门
  • react-新建项目复用node_modules
  • uni-app - 微信小程序中,使用 navigateTo 传递非常大的数字传参精度丢失的问题
  • 1.6 点云数据获取方式——单目相机多视图几何
  • 牛市早报|今年第二批810亿元超长期特别国债资金下达,支持消费品以旧换新
  • 邮储银行一季度净赚超252亿降逾2%,营收微降
  • 文天祥与“不直人间一唾轻”的元将唆都
  • 金融街:去年净亏损约110亿元,今年努力实现经营稳健和财务安全
  • 中国黄金协会:一季度我国黄金产量同比增1.49%,黄金消费量同比降5.96%
  • 朝鲜证实出兵俄罗斯协助收复库尔斯克