C++学习笔记01:函数与堆区

本文讲解了博主在学习C++过程中遇到的问题,重点阐述了堆区(动态内存)与栈区(局部变量)的区别,以及如何理解内存的分配和释放。通过实例代码解析了函数返回值对堆内存的影响。
摘要由CSDN通过智能技术生成

        博主在B站跟着黑马学C++,黑马的C++课程对于没学过C的同学跟起来还是有些吃力的,此博客专辑用于解答弹幕的一些常见问题,有一些弹幕问题也是作者之前不太了解的,于是查阅一些了资料。博主也是小白,内容有错误希望大佬指出。

        首先明确一点:堆区是用于动态内存管理的区域,栈区则用于管理局部变量、函数参数等有生命周期的数据,栈区的数据在生命周期结束时(通常情况下,一个局部变量的生命周期就是所在的从变量创建到该变量所在的代码块结束的代码段),操作系统会自动进行释放,堆区的数据则需要编程者自己释放,否则会一直存储在堆区直到程序运行结束。

        如下代码就是问题比较多的地方。

        

        我们看看这段代码的运行流程:

        进入主函数后,先在栈区申请一块空间,这块空间属于int*类型的指针p,由于该指针目前只是声明还未初始化,因此该指针(变量)的值还是随机值。为了区分,我们将这个指针称为p1.

        接着执行func函数。func函数同样先在栈区申请一块空间,这块空间属于int*类型的指针p,我们将这个指针成为p2。接着new关键字在堆区申请一块空间,堆区的空间类型为int,值是10。p2指向堆区空间的首地址。然后函数返回p2。

        栈区的p1接收返回值p2。然后p2生命周期结束,被销毁。但是,func函数在堆区申请的空间生命周期还没结束,因为堆区的空间只有当程序员释放时生命周期才会结束。也就是说,p1利用func的返回值仍能找到堆区中的数字10。在p1解引用时是可以打印的。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值