引用
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. 总结
- 能使用引用的地方都可以使用指针完成,但是引用起来更方便,所以能使用引用的地方尽量使用引用
