作用:给变量起别名
语法:数据类型 &别名 = 原名
#include <iostream> using namespace std; int main() { int a = 10; int &b = a; cout << a; //输出10 cout << b; //输出10 b = 100; cout << a; //输出100 }
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修饰实参
#include <iostream> using namespace std; //交换函数 //1、值传递 void mySwap01 (int a, int b) { int temp = a; a = b; b = temp; cout << a << " " << b; //输出20 10 形参发生交换 } //2、地址传递 void mySwap02 (int * a, int * b) //a 和 b 接收的是实参的地址 { int temp = *a; *a = *b; *b = temp; cout << *a << " " << *b; //输出20 10 形参发生交换 } //3、引用传递 int mySwap03 (int &a, int &b) { int temp = a; a = b; b = temp; cout << a << " " << b; //输出20 10 形参发生交换 } int main() { int a = 10; int b = 20; /* 1、值传递 * mySwap01 (a, b); //形参不会修饰实参 * cout << a << " " << b; //输出10 20 */ /* 2、地址传递 * mySwap02 (&a, &b); //形参修饰实参 * cout << a << " " << b; //输出20 10 实参发生交换 */ // 3、引用传递 mySwap03(a, b); //形参修饰实参 cout << a << " " << b; //输出20 10 实参发生交换 }
作用:引用时可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用为左值
#include <iostream> using namespace std; //1、不要返回局部变量的引用 int & test01() { int a = 10; //局部变量存放在栈区 return a; } //2、函数的调用可以作为左值 int & test02() { static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后释放 return a; } int main() { int &ref = test01(); cout << ref << endl; //输出10,编译器做了保留 cout << ref << endl; //输出乱码 int &ref2 = test02(); cout << ref2 << endl; //输出10 cout << ref2 << endl; //输出10 test02() = 1000; //如果函数的返回值是引用,函数的调用可以作为左值 cout << ref2 << endl; //输出1000 cout << ref2 << endl; //输出1000 }
本质:引用的本质在C++内部实现的是一个指针常量
int a = 10; int &ref = a; //自动转化为 int * const ref = &a; 指针的指向不可修改
作用:常量引用最主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
//场景1 //加上const之后 编译器将代码修改 // int temp = 10; const int &ref = temp; const int &ref = 10; //可执行,且之后ref不可修改 //场景2 //打印数据函数 void showValue (const int & val) { // val = 1000; //报错 不可修改 cout << val << endl; } int main() { int a = 100; showValue(a); //打印100 }
原文:https://www.cnblogs.com/baicang/p/15096277.html