1.引用的作用:给变量名起别名
2.语法:数据类型 &别名 = 原名
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int &b = a;
cout << "a=" << a << endl; //10
cout << "b=" << b << endl; //10
b = 100;
cout << "a=" << a << endl; //100
cout << "b=" << b << endl; //100
system("pause");
return 0;
}
3.引用的注意事项
(1)引用一定要初始化
(2)引用一旦初始化过后就不能修改
4.引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
#include <iostream>
using namespace std;
void swap1(int a,int b)
{
int temp = a;
a = b;
b = temp;
}
void swap2(int &c, int &d)
{
int temp = c;
c = d;
d = temp;
}
void swap3(int *c, int *d)
{
int temp = *c;
*c = *d;
*d = temp;
}
int main()
{
int a = 10;
int b = 20;
swap1(a, b);//指传递形参也会修饰实参
cout << "swap1中a = " << a << endl; //10
cout << "swap1中b = " << b << endl; //20
swap2(a,b); //地址传递形参也会修饰实参
cout << "swap2中a = " << a << endl; //20
cout << "swap2中b = " << b << endl; //10
swap3(&a, &b); //引用传递形参也会修饰实参
cout << "swap2中a = " << a << endl; //10
cout << "swap3中b = " << b << endl; //20
system("pause");
return 0;
}
5.引用做函数的返回值
注意:不要局部变量的引用
函数的调用可以做左值
#include <iostream>
using namespace std;
int &test01()
{
int a = 10; //局部变量存放在栈上
return a;
}
int &test02()
{
static int a = 10; //静态局部变量存放在全局区
return a;
}
int main()
{
int &ret1 = test01();
cout << ret1 << endl; //10
cout << ret1 << endl; //乱码
int &ret2 = test02();
cout << ret2 << endl; //10
cout << ret2 << endl; //10
test02() = 1000; //函数调用做左值
cout << ret2 << endl; //1000
cout << ret2 << endl; //1000
system("pause");
return 0;
}
6.引用的本质
int &ret = a;
被自动转换为int *const ret = &a; //指针的指向不可改,也进一步说明引用不能更改
ret = 20; //内部发现ret是引用自动将它转换成 *ret = 20;
7.常量引用
作用:主要用来修饰形参,防止误操作
在函数的的形参列表中可以加const修饰,防止形参改变实参
#include <iostream>
using namespace std;
void showValue(const int &val)
{
//val = 100; //加上const就不能更改值
cout << val << endl;
}
int main()
{
int a = 10;
//加上const后编译器将代码修改 int temp = 10; const int &ret = temp;
const int &ret = 10; //引用必须是一块合法的内存空间(将const去掉就不合法了)
//ret = 20; //(不合法)加入const后变为只读,不可修改
showValue(a);
cout << a << endl;
system("pause");
return 0;
}