C++当中有一个概念叫做引用,引用是对C语言的一个扩展,引用相当于是变量的别名。之所以增加引用,主要是为了利用引用作为函数的形式参数。
int a;
int &b = a;
以上b就成为了a的引用。其中b就是a的别名而已,他们代表的都是同一个单元。
为什么c++函数的形参一般使用引用?
让我们看两个例子。例子是输入两个值然后替换两个值的位置。
(1)使用实参作为形参
#include <iostream>
using namespace std;
void swap(int a,int b){
int temp;
temp = a;
a = b;
b = temp;
}
int main(){
int i = 3,j = 5;
swap(i,j);
cout <<i<<","<<j<<endl;
return 0;
}
计算结果
计算结果仍然为3,5
计算结果
(2)使用引用作为形参
#include <iostream>
using namespace std;
void swap(int &a,int &b){
int temp;
temp = a;
a = b;
b = temp;
}
int main(){
int i = 3,j = 5;
swap(i,j);
cout <<i<<"."<<j<<endl;
}
计算结果
计算结果为5,3
计算记过
这是为什么呢?
例子1当我们使用实参作为形参的时候,i,j进入到swap函数的时候实际上是将值copy了一份到a,b当中,然后a,b进行计算以后结果虽然是已经替换过的了,但是没有返回给i,j。为了解决这个问题我们使用引用。在例子2当中,i,j传入到swap当中的时候实际上是给i和j添加了引用 &a和&b,a和b这时所代表的东西和i和j是一样的东西,所以替换的时候最后i和j的值输出也发生了变化。
扩展思考
同理我们使用指针*p也可以实现同样的结果,指针和引用的区别在于,引用不需要再开辟新的内存空间,而指针会开辟一个新的存储空间用来存储变量的地址。