C++基础知识学习笔记(4)——引用

学习参考:https://www.bilibili.com/video/BV1et411b73Z?p=89&spm_id_from=pageDriver&vd_source=cc561849591f6a210152150b2493f6f3

引用

作用:给变量起别名
语法:数据类型& 变量 = 原变量;

int main()
{
	int a = 10;
	int& b = a;
	b = 20;
	cout << b << endl;//20
	cout << a << endl;//20
	return 0;
}

引用使用时需要注意:

  1. 引用必须要初始化
    创建引用但不初始化:int &b;//错误的

  2. 引用初始化后就不能再修改
    不能再让它成为别的变量的引用了。
    尝试更改,其实是赋值操作:

int main()
{
	int a = 10;
	int b = 1;
	int& c = a;
	c = b;//赋值操作(为a、c赋值为1),而不是更改引用

	cout << a << endl;//1
	cout << b << endl;//1
	cout << c << endl;//1
	return 0;
}

引用做函数参数

作用:函数传参时,用引用技术让形参修饰实参,让形参是实参的别名
优点:可以简化指针,可以修改实参(达到地址传参的效果)。

void swap(int *a, int *b) {
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
void swap2(int &a, int& b) {
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 10;
	int b = 1;
	cout << a << "," << b << endl;
	swap(&a, &b);
	cout << a << "," << b << endl;//1,10
	swap2(a, b);
	cout << a << "," << b << endl;//10,1
	return 0;
}


引用本质上是指针的伪装,是指针的语法糖:https://zhuanlan.zhihu.com/p/621684658
这里的&是变量声明的一部分,应该离数据类型近一点比较合适。
这个别名只在源代码层面存在,在编译后实际上还是原变量,不会多产生一个变量。

引用做函数返回值

  • 不要返回局部变量的引用

image
image

  • 函数的调用可以作为左值

image

int& get() {
	static int a = 20;
	return a;
}
int main()
{
	int& ref = get();
	cout << ref << endl;//20
	get() = 1;
	cout << ref << endl;//1
	return 0;
}

静态变量对全局区,此区域的数据在程序结束后释放。所以上面代码中静态变量可以从函数中返回,如果是局部变量则不行。

引用的本质

本质:在c++内部是指针常量。.

image

常量引用

作用:const修饰形参引用,防止误操作、防止形参修改实参。

image

就是相比值传递,引用传递可以修改实参,但是有时不想在引用传递中允许修改实参,就加一个const修饰。

image

posted @ 2024-05-25 15:12  greencode  阅读(8)  评论(0编辑  收藏  举报