第八部分 内存四区、函数传入参数的默认和占用、函数引用、函数重载

一、内存四区

内存分为:代码区、全局区、栈区、堆区

程序运行前:

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)函数重载时,遇到默认参数易遇到二义性,应当尽量避免

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容