引用参数
定义
以符号“&”开始的参数即为引用参数。
如果一个形参是引用参数,调用部位将把实参的地址传递给子程序。子程序可以改变传递给引用参数的任何实参,因为子程序操作的是真正的变量,而不是它的副本。
引用变量在声明的时候必须初始化
例如:
int a;
int & ref = a;
引用参数操作的是引用的对象内存中的空间
int a = 10;
int & ref = a;//ref 引用 a的内存地址
printf("ref = %d\n", ref);
a = 20;//当a内存的值改变,ref找到a的内存地址得到改变后的值
printf("当a改变后ref = %d\n", ref);
ref = 30;//ref对引用的内存地址进行改变, a在内存中的值改变,a改变
printf("当ref改变后a=%d",ref);
普通变量操作自己的内存空间
int a = 10;
int b = a;//使用了一个int大小的空间给b,将a的值复制给b
printf("b = %d\n", b);
a = 20;//当a所在内存的值改变,b所在内存 的值不会受影响
printf("当a改变后b = %d\n", b);
b = 30;//b所在内存的值改变, a在内存中的值也不会受影响
printf("当b改变后a=%d",a);
使用引用参数的函数调用方式
int sum(int & a, int & b);
//c = sum(10, 20); 错误,不能传入直接数
int a = 10, b = 20;
c = sum(a, b); //正确,必须通过变量将值传入函数
但是如果函数在声明的时候用const
修饰了引用变量,就可以传入直接数,编译器会创建一个临时的无名变量跟引用变量绑定。例如:
int sum(const int & a,const int & b);
c = sum(10, 20); //正确,引用变量被const修饰