C++引用的作用

引用的基本语法

作用:为变量起一个别名。因此可以用过引用对变量进行修改。

符号:&

e.g. int a=10; int &b=a;

引用的本质是一个指针常量。因此一旦初始化后,其指向是不能改变的。

在使用引用时,必须对引用进行初始化,且在初始化后不允许改变。

#include
using namespace std;
int main()
{
	int a = 10;
int c=10;
    int& b;  //错误
	int& b = a;  //引用必须初始化,告知该引用为谁的别名
    b = c; //这是赋值操作,将c的值传给b,a的值也改变了
	b = 20;  //通过引用来修改内存
	cout << a << endl;
	return 0;
}

引用作为函数输入参数(使用引用修饰实参)

作用:让形参的改变来改变实参,可以简化指针修改实参。这种方式成为引用传递。其效果等同于地址传递,但更加简单。

#include
using namespace std;
//值传递
void swap01(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	//值传递,形参可以改变
}
//地址传递
void swap02(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
//引用传递
void swap03(int& a, int& b)//此时的a是swap(a,b)中的a的别名
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 10;
	int b = 20;
	//swap01(a, b); 	//值传递,实参没有改变(形参不修饰实参)
	//swap02(a, b); 	//地址传递,实参发生改变(形参修饰实参)
	swap03(a, b); 	//引用传递,实参发生改变(形参修饰实参)
	cout << a << endl;
	cout << b << endl;

	return 0;
}

引用作为函数的返回值

    引用是可以作为函数的返回值的,但是不能返回局部变量的引用。

    函数的调用可以作为左值存在。

#include
using namespace std;
//不要返回局部变量的引用
int& test01()
{
	int a = 10;  //局部变量存储在栈区
	return a;
}
//函数的引用可以作为左值
int& test02()
{
	static int a = 10; //静态变量存放在全局区,全局区数据在程序结束后由系统释放
	return a;
}
int main()
{
	int& ref = test01();
	cout << ref << endl;  //第一次正确,因为编译器保留了数
	cout << ref << endl;  //第二次错误,因为栈区数据释放

	int& ref2 = test02();
	cout << ref2 << endl;
	cout << ref2 << endl;  //两次都正确

	//如果函数的返回值是一个引用,函数调用作为左值
	test02() = 1000;  //将返回的a的引用进行一个赋值,这是一个对原名的修改
	cout << ref2 << endl;  //ref02是别名,使用别名进行访问时,由于原名已经改变,因此输出是1000
	cout << ref2 << endl;  //两次都正确
	return 0;
}

常量引用

修饰形参,防止误操作。

一个小知识点,可以对const修饰的变量的引用直接赋值。

#include
using namespace std;
int main()
{
	int a = 10;
	int& ref = a;  //正确
	//int& ref = 10; //错误,必须引用一块合法的内存空间
	const int& ref1 = 10;  //加上const之后,编译器将对代码做修改:
	//等同于:int temp=10; const int& ref1 =temp;
	//且此时不可修改
}
#include
using namespace std;
//打印用户数据
void showValue(int& val)
{
	val = 1000;  //误操作,不小心修改了形参
	cout << val << endl;
}
void showValue1(const int& val)  //防止修改参数
{
	cout << val << endl;
}
int main()
{
	int a = 100;
	showValue(a);
}

你可能感兴趣的:(C++,c++,蓝桥杯,开发语言)