程序的内存模型、引用、函数补充

内存的分区模型

c++程序执行时将内存大致划分为4个区域

  1. 代码区:存放函数体的二进制代码,由操作系统进行管理
  2. 全局区:存放全局变量和静态变量以及常量
  3. 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
  4. 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

在程序编译后,生成了执行该程序的前分为两个区域

代码区:

存放CPU执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

全局区:

全局变量和静态变量存放在此
全局区还包含常量区,字符常量和其他常量也存放在此
该区域的数据在程序结束后由操作系统释放

堆区:

堆区数据由程序员管理开辟和释放
堆区数据利用new关键字进行开辟内存

new操作符

堆区开辟一个数,返回的是地址,用指针接收
示例

int *p = new int(10) //括号里是数值

堆区开辟一个数组,返回的是地址,用指针接收
示例

int *arr = new int[10] //括号里是数组大小

之后访问就正常访问,arr相当于数组名

释放数据用delete,其中释放数组用delete[] arr

引用

可以给变量起别名,用别名来操作变量
语法:数据类型 &别名 = 原名
例如:
int a = 10
int &b = a

就可以用b来操作a的数值了

注意事项

  • 引用必须初始化
  • 引用在初始化后,不可以改变

三种传递

值传递,形参改变不影响实参

void fun(int a, int b)
fun(a,b)

地址传递,形参改变影响实参

void fun(int *a, int *b)
fun(&a, &b)

引用传递,形参改变影响实参

void fun(int &a, int &b)
fun(a,b)

引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用可以作为左值
例如

int& test(){
	static int a = 20;
	return a;
}


test() = 1000;//相当于对返回的引用修改其内容

引用的本质

引用的本质在c++内部实现是一个指针常量

常量引用

int& ref = 10;//这是错误的,引用本身需要一个合法的内存空间
const int& ref = 10就正确了,原因是编译器对代码进行了优化
相当于执行了 int temp = 10; const int& ref = temp;

作用:常量引用主要来修饰形参,防止误操作

在函数形参列表中,可以加const修饰形参,防止形参改变实参

函数补充

函数默认参数注意事项:

1、如果某个位置参数有默认值,那么从这个位置往后的参数都必须有默认值
2、如果函数声明有默认参数,函数实现就不能有默认参数,声明和实现只能一个有默认参数

函数重载:

1、同一作用域
2、函数名相同
3、函数参数类型不同,或者个数不同,或者顺序不同
4、碰到默认参数会出现二义性,报错,要避免

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值