引用
1. 概念
助记,”小明是二狗子,二狗子是小明”
- 引用是一种类型
- 引用型变量定义时必须用同一个目标变量初始化
- 引用型变量就是目标变量的本身,可以看成时目标变量的别名,和目标变量是同一块内存
- 对引用型变量的操作就是对目标变量本身的操作
- 示例:
```cpp
include
using namespace std;
int main(int argc, char const *argv[]) { int val = 100; int& rval = val;
cout << "val= " << val << endl;
cout << "rval= " << rval << endl;
val++;
cout << "val= " << val << endl;
cout << "rval= " << rval << endl;
rval++;
cout << "val= " << val << endl;
cout << "rval= " << rval << endl;
return 0;
}

<a name="nioEH"></a>
# 2. 引用,做函数形参类型
- 形参就是实参的引用,形参和实参是同一块内存
- 修改形参就是修改实参
- 可以避免传参时的复制
- 示例:
```cpp
#include <iostream>
using namespace std;
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap2(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 1;
int b = 2;
swap(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
int e = 5;
int f = 6;
swap2(e, f);
cout << "e = " << e << endl;
cout << "f = " << f << endl;
return 0;
}
3. 引用,做函数返回值类型
- 函数返回的值,return后面的值是一块内存
- 返回引用的函数可以做左值
- 返回引用可以减少内存复制
- 注意事项:
- 从函数返回一个引用,必须要确保引用的内存,在函数返回后依然存在
- 可以返回静态局部变量的引用,实参的引用
- 不应该返回局部变量的引用和形参的引用
- 示例:
```cpp
include
using namespace std;
int& getStaticVarRef() { static int a = 1; cout << “a = “ << a << endl; return a; }
int& getActualArgumentRef(int& a) { a++; return a; }
int& getLocalVarRef() { int c = 1; cout << “c = “ << c << endl; return c; }
int main() { getStaticVarRef(); getStaticVarRef()++; getStaticVarRef();
int b = 1;
getActualArgumentRef(b)++;
cout << "b = " << b << endl;
getLocalVarRef();
getLocalVarRef()++;
getLocalVarRef();
return 0;
}
<a name="ltI2I"></a>
# 4. 引用的本质是指针类型常量
- 示例:
```cpp
#include <iostream>
using namespace std;
int main() {
int n = 666;
int* const p = &n;
*p = 777;
cout << "n = " << n << endl;
cout << "*p " << *p << endl;
n = 888;
cout << "n = " << n << endl;
cout << "*p " << *p << endl;
int& rn = n;
rn++;
cout << "n = " << n << endl;
cout << "*p " << *p << endl;
return 0;
}
5. 总结
- 能使用引用的地方都可以使用指针完成,但是引用起来更方便,所以能使用引用的地方尽量使用引用