一
内存分区模型
c++程序在执行时,把内存大方向划分为四个区域。
1,代码区(程序运行前):存放函数体的二进制代码,由操作系统进行管理的
2,全局区(程序运行前):存放全局变量和静态变量以及常量
3,栈区(程序运行后):由编译器自动分配释放,存放函数的参数值,局部变量等。
注意事项:不用返回局部变量的地震,局部变量在栈区,由编译器自动释放,即函数调用完后该变量就被销毁,传回的地址是野指针。
4,堆区(程序运行后):由程序员分配和释放, 若程序员不释放, 程序结束时由操作系统回收。
利用new操作符在堆区开辟数据(返回该数据类型的指针),用delete释放(delete 加指针)。
数据10是存放在堆区,指针p存放在栈区,p指向的是在堆区的10的地址。
二
引用
引用的作用:给变量起别名。
语法:数据类型 &别名=原名
原名和别名操作的是同一块内存,固对别名修改原名也会变。
引用注意事项
1,引用必须初始化。
2,引用初始化后不可修改。
引用作函数参数,形参会修饰实参
引用作函数的返回值
1,不要返回局部变量的引用
2,如果函数的返回值是引用,这个函数调用可以作为左值.
引用的本质是指针常量,但所有的指针操作编译器都帮我们做了
常量引用(用来修饰形参,防止误操作)
引用一块常量需要在前面加const,且不能修改。
三
函数提高
函数默认参数:c++中函数形参可以有默认值。1,如果自己传入数据,就用自己的数据,如果没有那么用默认值。2,如果某个位置有了默认值,那么从这个位置往后都必须有默认值。3,函数的声明和实现只能有一个有默认参数。
占位参数,数据类型后不加形参(现阶段用不到,后面会用)
函数重载
函数重载注意事项
1引用作为重载得条件
2函数重载碰到默认参数
若调用函数时传一个参数,则函数报错,若传两个参数,则调用第一个函数。