2021.11.10
程序中的内存模型:
C++在程序运行之前分为全局区和代码区
代码区:存放CPU执行的机器指令,
????????共享,对于频繁被执行的程序,只需要在内存中有一份代码即可
????????只读,防止程序意外地修改了指令
全局区:存放全局变量、静态变量、常量(存放const修饰的全局变量、字符串常量),该区域的数据在程序结束后由操作系统释放。
不在全局区中:局部变量、const修饰的局部变量
栈区:由编译器自动分配释放,存放函数的参数值、局部变量等(不要返回局部变量的地址,栈区开辟的数据由编译器自动释放)
堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收,利用new在堆区中开辟内存。如?
int * a = new int(10); //10表示整形10
int * arr = new int[10]; //10表示数组有10个元素
? ?若果想释放堆区的数据,利用关键字delete。
delete a;
delete []arr;
C++中的引用
作用:给变量起别名
语法:数据类型? &别名? = 原名
int a = 10;
int &b = a; //引用必须初始化,引用在初始化后不可以改变
1.引用作函数参数
void swap(int &a, int &b) //引用传递,形参会修饰实参,地址传递(指针)也可以
{
int temp = a;
a = b;
b = temp;
}
2.引用做函数返回值
int &a = test(); //不要返回局部变量引用
cout << "a = " << a << endl;
test() = 1000 //如果函数的返回值是引用,这个函数调用可以作为左值
cout << "a = " << a << endl;
3.引用的本质:在C++内部实现就是指针常量
int& ref = a; //相当于 int* const ref = &a ;
|