赞
踩
作用:给变量其别名
语法:数据类型 &别名 = 原名
- #include<iostream>
- using namespace std;
-
- 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;
- }
- a=10
- b=10
- a=100
- b=100
引用必须初始化
引用在初始化后不可以改变
int a = 10;
int &b = a;
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
- #include<iostream>
- using namespace std;
-
- //1.值传递
- void swap01(int a, int b) {
- int temp = a;
- a = b;
- b = temp;
- }
-
- //2.地址传递
- void swap02(int* a, int* b) {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
-
- //3.引用传递
- void swap03(int& a, int& b) {
- int temp = a;
- a = b;
- b = temp;
- }
- int main() {
- int a = 10;
- int b = 20;
- swap01(a, b); //值传递时,形参不会修饰实参
- cout << " swap01 a = " << a << endl;
- cout << " swap01 b = " << b << endl;
-
- swap02(&a,&b); //地址传递时,形参会修饰实参
- cout << " swap02 a = " << a << endl;
- cout << " swap02 b = " << b << endl;
-
- swap03(a,b); //引用传递时,形参会修饰实参
- cout << " swap03 a = " << a << endl;
- cout << " swap03 b = " << b << endl;
- }
1.不要返回局部变量的引用
2.如果函数的返回值是一个引用,那么函数的调用可以作为左值
- #include<iostream>
- using namespace std;
-
- int& test01() {
- int a = 10; //局部变量存放在栈区
- return a;
- }
-
- // 返回静态变量引用
- int& test02() {
- //静态变量存放在全局区,全局区上的数据在程序结束后由系统释放
- static int a = 10; //使用static增加程序的生命周期
- return a;
- }
-
- int main() {
- //不能返回局部变量的引用
- int& ref1 = test01();
- cout << "ref1 = " << ref1 << endl; //结果错误,因为a的内存已经被释放
-
- //如果函数做左值,那么必须返回引用
- int& ref2 = test02();
- cout << "ref2 = " << ref2 << endl;
- cout << "ref2 = " << ref2 << endl;
-
- test02() = 1000;
- cout << "ref2 = " << ref2 << endl;
- cout << "ref2 = " << ref2 << endl;
- }
- ref1 = -858993460
- ref2 = 10
- ref2 = 10
- ref2 = 1000
- ref2 = 1000
本质是在C++内部实现一个指针常量
C++更推荐使用引用,因为语法方便
- int a = 10;
- int &b = a;
上面定义的引用等价于下面定义的指针常量,指向不可以修改,但是值可以修改
- int a = 10;
- int * const b = &a;
作用:常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
const int &ref = 10;
上面的代码等价于下面的代码
- int temp = 10;
- const int &ref = temp;
- #include<iostream>
- using namespace std;
-
- void print(const int& val) { //增加const后,可以防止误修改a的值
- // int val = 1; 此时val的值是不可以修改的
- cout << " val = " << val << endl;
- }
-
- int main() {
- int a = 1000;
- print(a);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。