引用
引用的基本使用
作用:给变量起别名
语法: 数据类型 &别名 = 原名
示例:自己复制到编译器琢磨吧
#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;
}