C++ 一些学习笔记(四) 引用
主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。
本文章的主要内容是关于程序引用的。
1.引用的基本使用
作用:给变量起别名
语法:数据类型 &别名=原名
2.引用注意事项
引用必须初始化
引用在初始化之后不可改变
3.引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
//交换函数
//1.值传递
void mySwap01(int a,int b){
int temp=a;
a=b;
b=temp;
}
//2.地址传递
void mySwap02(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
//3.引用传递
void mySwap03(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int main(){
int a=10;
int b=20;
mySwap01(a,b);//值传递,形参不会修饰实参
mySwap02(&a,&b);//地址传递,形参修饰实参
mySwap03(a,b);//引用传递,形参修饰实参
}
总结:通过引用参数产生的效果同按地址传递是一样的,引用的语法更清楚简单
4.引用做函数返回值
作用:引用时可以作为函数返回值的,如果函数的返回值是引用,这个函数调用可以作为左值
注意:不要返回局部变量引用
用法:函数调用为左值
//引用函数的返回值
//1.不要返回局部变量的引用
void test01(){
int a=10;//局部变量存放在四区中的栈区
return a;
}
//2.函数调用可以作为左值
void test02(){
static int a=10;//静态变量,存放在全局区,由系统在运行后回收
return a;
}
int main(){
//int &ref=test01();//不要返回局部变量的引用
int &ref2=test02();
test02()=1000;//如果函数的返回值是引用,这个函数调用可以作为左值
}
5.引用的本质
本质:引用的本质在C++内部是一个指针常量
//发现是引用,转换为 int* const ref = &a;
void func(int& ref){
ref = 100; // ref是引用,转换为*ref = 100
}
int main(){
int a = 10;
//自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
int& ref = a;
ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
func(a);
return 0;
}
6.常量引用
作用:常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
boid showValue(const int&val){
//val=1000;//修改不了val
cout<<<<;
}
int main(){
//常量引用
//使用场景,用来修饰形参,防止误操作
//int a=10;//int &ref=10;//引用必须引用合法的内存,这一行代码不正确
//const int &ref=10;//加上const后,编译器将代码修改为int temp=10; const int &ref=temp;
int a=100;
showValue(a);
}