引用

引用的基本使用

作用:给变量起别名

语法: 数据类型 &别名 = 原名

示例:自己复制到编译器琢磨吧

#include<iostream>
using namespace std;

int main(void)
{
	//引用基本语法
	//数据类型 &别名 = 原名

	int a = 10;
	//创建引用
	int& b = a;

	cout << a << endl
		<< b << endl;

	b = 20;
	cout << a << endl;

	system("pause");
	return 0;
}

结论:

通过给一个变量起别名,可以起到修改别名的数据原名也会跟着变的作用

引用注意事项

引用做函数参数值

作用:函数传参是,可以利用引用的技术让形参修饰实参

优点;可以简化指针修改实参

示例:

#include<iostream>
using namespace std;

//交换函数

//值传递
void swap01(int a,int b)
{
	int temp = a;
		a = b;
	b = temp;
	/*cout << "a = " << a << endl;
	cout << "b = " << b << endl;*/
}

//地址传递
void swap02(int * a,int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;


}


//引用
void swap03(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

int main(void)
{
	int a = 10;
	int b = 20;
	cout << "-----------原来的----------" << endl;
	cout <<"         a = " << a << endl;
	cout <<"         b = " << b << endl;
	cout << "---------------------------" << endl<<endl;

	swap01(a,b); //值传递,形参不会修饰实参

	//不注释掉后面没法测试 swap02(&a, &b);//指针传递可以改变实参
/*	cout << "a = " << a << endl;
   cout << "b = " << b << endl;*/

	swap03(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	system("pause");
	return 0;
}

总结:通过引用传递的效果是和地址传递的效果是一样的

引用作函数的返回值

#include<iostream>
using namespace std;

//引用做函数的返回值
//不要返回局部变量的引用
int& test01() {
	int a = 10;//存放在内四区的 栈区
	return a;
}

//函数的调用可以作为左值
int& test02() {
	static int a = 10;//静态变量,在全局区,全局区在程序结束后系统释放
	return a;
}


int main(void) {
	int& ref01 = test01();
	cout << "ref01 = " << ref01 << endl;//a的内存释放了 所以错误

	int& ref02 = test02();
	cout << "ref02 = " << ref02 << endl;
	cout << "ref02 = " << ref02 << endl;

	system("pause");
	return 0;
}

引用的本质

本质:引用的本质在c++内部实现的是一个指针常量

记住:引用一但初始化就不可以改变

具体请看我之前发布的有关指针的博文[点我跳转](小白初学指针 | LLH的博客 (ababll5.cn))

常量引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表中,可以家const修饰形参,防止形参改实参

#include <iostream>
using namespace std;

// 打印数据函数
void out(const int &val)
{

    cout << "val = " << val << endl;
}

int main(void)
{
    // 常量引用
    // 使用场景:用来修饰形参防止误操作

    // int a = 10;

    // 加上const之后,编译器将代码修改 int temp = 10; int & ref =temp
    //   const int & ref = 10; //引用必须引一块合法的内存空间
    //   ref = 20; //加入const就不可以修改了

    int a = 100;
    out(a);
    cout << "a = " << a << endl;

    system("pause");
    return 0;
}