引用
- 引用的基本使用
作用:给变量起别名
语法:数据类型 &别名=原名
示例
int main() { int a = 10; int& b = a; cout << "a= " << a << endl; cout << "b= " << b << endl; b = 100; cout << "a= " << a << endl; cout << "b= " << b << endl; return 0; }
2.引用的注意事项
- 引用必须初始化
- 应用在初始化之后,不可以改变
示例
int main() { int a = 10; int b = 20; //int &c; //错误,引用必须初始化 int& c = a; //一旦初始化后,就不可以更改 c = b; //这是赋值操作,不是更改应用 cout << "a= " << a << endl; cout << "b= " << b << endl; cout << "c= " << a << endl; return 0; }
int a=10;
int &b=a;
(1)引用必须要初始化
int &b; //错误
(2)引用一旦初始化后,就不可以更改了
int &b=c; //错误
3.引用做函数参数
作用:函数传参时,可以用引用的技术让形参修饰实参
优点:可以简化指针修改实参
先介绍一下函数传参的方式
(1)值传递
void swap01(int a, int b) { int temp = a; a = b; b = temp; } int main() { int a = 10; int b = 20; swap01(a, b); cout << "a= " << a << endl; cout << "b= " << b << endl; return 0; }
使用值传递时,形参的改变不会影响到实参的改变,因此经过swap函数后,a和
b的值仍然不变
(2)地址传递
void swap02(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int main() { int a = 10; int b = 20; swap02(&a, &b); cout << "a= " << a << endl; cout << "b= " << b << endl; return 0; }
地址传递参数时,形参会通过实参的地址来修饰实参,因此在上面的代码中,a和b的值会发生改变
(3)引用传递
void swap03(int& a, int& b) { int temp = a; a = b; b = temp; } int main() { int a = 10; int b = 20; swap03(a, b); cout << "a= " << a << endl; cout << "b= " << b << endl; return 0; }
引用传递,形参会修饰实参
总结:通过引用参数产生的效果同地址传参是一样的。引用的语法更清楚简单
4.引用做函数返回值
注意:不要返回局部变量的引用
错误示例
int& test01() { int a = 10; //局部变量存放在四区中的栈区 return a; } int main() { int& re = test01(); cout << "re= " << re << endl; cout << "re= " << re << endl; return 0; }
返回局部变量的引用时,得到的结果可能是错误的
引用可以返回全局区的变量
如:
int& test02() { static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放 return a; } int main() { int& re = test02(); cout << "re= " << re << endl; cout << "re= " << re << endl; cout << "re= " << re << endl; return 0; }
函数的调用可以作为左值
int& test02() { static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放 return a; } int main() { int& re = test02(); cout << "re= " << re << endl; cout << "re= " << re << endl; test02() = 1000; //如果函数的返回值是引用,这个函数调用可以作为左值 cout << "re= " << re << endl; cout << "re= " << re << endl; return 0; }
如果函数的返回值是引用,这个函数调用可以作为左值
5.引用的本质
本质:引用的本质在c++内部实现是一个指针常量