一、内存四区
内存分为:代码区、全局区、栈区、堆区
程序运行前:
1、代码区:只读和共享两个特点
2、全局区:存放全局变量、静态变量(static int a)和常量(const修饰的全局变量和字符串常量)、全局区的数据 空间由系统释放
程序运行后:
3、栈区:由编译器自动释放,存放函数的参数值(形参)和局部变量,因此不要返回局部变量的地址
4、堆区:程序员进行管理释放通过new和delete指令,但是在程序执行完之后系统会自动回收
int ret()
{ int *p=new int(10)};return p;
int main()
{int *a=ret();cout<<*a<<endl;//会输出堆区存放的数据:10;
delete a;//使用delete指令释放堆区内存}
堆区创建数组:
数据类型 [数组长度]:int * arr = new int[10];
//创建一个长度为10的整型数组 注意指针数据类型名称要与堆栈存数据类型相同
delete指令:delete []arr;
//需要告诉delete指令要求删除数组
二、函数引用:
数据类型 & 变量名称 = 原变量名称;
//这样可以使别名和原名一起都可以操作同一个内存空间,
注意:
(1)别名与原名数据类型应相同
(2)应用必须要初始化
(3)引用初始化后不可更改,这是因为引用的本质是一个指针常量,引用的别名其实存储的是原名变量的地址
关于常量的引用在函数重载下有说明
对于函数的调用,可以 使用引用的方式通过形参修饰实参;
void swap(int &a, int &b)
引用本身需要一个地址常量
三、函数传入参数的默认及占位
1、函数的默认:被调用的函数可以有默认的返回值(在定义传入值的地方定义即可),在但是会优先使用调用参数时传入的返回值
要注意:
(1)某个位置设定默认值之后,要保证其后面的形参都有设置默认值 因为默认实参要在形参的结尾
(2)声明和实现只能有一个默认参数
2、函数的占位参数: 函数类型 函数名称(传入值类型)
四、函数重载:
1、满足条件:
(1)在同一作用域下
(2)函数名称相同
(3)函数参数类型不同或者个数不同或者顺序不同(此处是指参数数据类型的数据不同)
返回值类型不可以作为重载条件
2、注意事项
(1)引用作为重载的条件:
虽然const 数据类型 &引用名 与数据类型 & 引用名是两种不同的数据类型,二者可以作为重载,但是当重载参数为变量名时,重载不能正常实现会调用 数据类型 & 变量名,若想调用 传入参数为常量引用的函数则,将传入参数设置为一个值,例如:func(10),这里使用了上面const 数据类型 &变量名=值 合法 ,而普通引用不合法这一特性。
(2)函数重载时,遇到默认参数易遇到二义性,应当尽量避免