20.8.21,学习c++的第五天
学习内容
内存的分区
- 代码区:存放函数体的二进制代码,由操作系统进行管理的(共享、只读)
- 全局区:存放全局变量和静态变量以及常量
- 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
new 与 delete 的初步用法
int* a = new int(10);
delete a;
//堆区开辟数组
int* arr = new int[10];
delete[] arr;//释放数组 delete 后加 []
引用
语法: 数据类型 &别名 = 原名
int a = 10;
int &b = a;//引用的作用:给变量起别名
引用必须初始化,且初始化后,不可以改变。
在函数中,通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单。
//3. 引用传递
void mySwap03(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
mySwap03(a, b);
cout << "a:" << a << " b:" << b << endl;
}
引用做函数返回值时,可函数调用作为左值,(即将右值赋给函数返回值)
//返回静态变量引用
int& test02() {
static int a = 20;
return a;
}
int main() {
//如果函数做左值,那么必须返回引用
int& ref2 = test02();
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
test02() = 1000;
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
}
引用的实质:在c++内部实现是一个指针常量
int main(){
int a = 10;
int& ref = a; //自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
}
在函数形参列表中,可以加const修饰形参,防止形参改变实参,防止误操作
//引用使用的场景,通常用来修饰形参
void showValue(const int& v) {
//v += 10;
cout << v << endl;
}
注
此篇及以后,就是学习全新的知识了,注意多理解。
引用这个用法有些绕,多理解理解。