c++笔记第四天
内存分区模型;
代码区:存放函数体二进制代码(代码共享和只读)
全局区:存放全局变量和静态变量 (程序结束由操作系统释放) (在普通变量前加static属于静态变量)
栈区:由编译器自动编译释放,存放函数的形参,局部变量,程序结束由系统释放( 不要反回局部变量的地址)
堆区:由程序员分配和释放,若程序员不释放程序结束时由系统释放回收,
在c++中利用new来开辟内存返回开辟该数据类型的指针。
int *p=new int(10)
用delete释放,
delete p;
释放堆区数组时要加[ ];
1 int *arr =new int[10]; 2 delete[ ] arr;
不同区域存放的数据赋予不同的生命周期,便于灵活编程。
引用的使用
作用给变量起个别名
格式
数据类型 &别名=原名
注意:
引用必须初始化
引用初始化后不可以改变
引用做函数参数
函数传参时可以用引用来让形参修饰实参,以简化执政修饰实参。
void Myswap(int &a,int &b);
引用作为函数返回值
1 int& test() 2 { 3 static int a=20;//返回静态变量 4 return a; 5 6 }
注意
不要返回局部变量的引用
函数调用可以作为左值
1 int& test() 2 { 3 4 static int a=10; 5 return a; 6 7 } 8 test()=1000;
引用的本质
int a=20;
int& b = a;//相当于 int *const b=&a;
在C++中引用的本质在内部实现就是一个指针常量
const修饰的常量引用
使用场景:用来修饰形参,防止误操作。
const int& ref =10;//相当于int tem =10;const int &ref =tem;
函数的默认参数
在c++中函数的形参表中是可以有默认值得。
格式
返回值类型 函数名(参数=默认值){ }
注意:
1、如果函数形参从某个参数有了默认值,那么从这个位置往后,从左到右都必须有默认值。
2、如果函数声明有了默认参数,函数实现就不能有默认参数。
函数占位参数
c++中函数的形参表里可以有展位参数,用来做占位,调用函数时必须填补该位置
格式
返回类型 函数名(数据类型){ }
1 int test1(int) 2 { 3 ; 4 ; 5 }
占位参数可以有默认值
1 int test2(int =10){ 2 3 4 ; 5 6 }
函数重载
函数名可以相同
重载满足条件
1、同一个作用域
2、函数名称相同
3、函数参数类型不同或者参数个数不同或则顺序不同
注意:函数的返回值不可以作为函数重载的条件
函数重载注意事项
1、引用作为重载条件
1 void func (int &a){}; 2 void func(const int &a){}; 3 int a=10; 4 func (a);//调用第一个函数 void func (int &a) 5 func(10);//调用第二个函数 void func(const int &a)
2函数重载遇到函数默认参数
1 void func (int a){} 2 void func (int a,int b=10){} 3 func(10)//这个第一个函数和第二个函数都可调用,发生二义性,要尽量避免。

浙公网安备 33010602011771号