在 C++ 中,引用 的一个重要作用就是作为 函数 的参数。在 C 语言 中 函数参数 传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是 指针,因为 这样可以避免将整块数据全部压栈,可以提高程序的效率。
但是在 C++ 中又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。
定义 C++ 引用做函数参数
#include <iostream>
using namespace std;
int swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
int a = 1024, b = 1100;
cout << "before a = " << a << " b = " << b << endl;
swap(a, b);
cout << "after a = " << a << " b = " << b << endl;
return 0;
}
程序运行后,控制台输出如下图所示:
我们首先,定义了一个 swap 函数,想通过该函数实现交换两个参数的值,最后,我们在 main 函数里面调用了该函数,但并未能实现交换两个变量的值,现在,我们修改程序,使用指针传递参数,修改如下:
#include <iostream>
using namespace std;
int swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = *temp;
}
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
int a = 1024, b = 1100;
cout << "before a = " << a << " b = " << b << endl;
swap(&a, &b);
cout << "after a = " << a << " b = " << b << endl;
return 0;
}
程序运行后,控制台输出如下图所示:
这次,我们使用了指针传递,我们看到,实现了交换了两个变量的值,现在,我们再次修改程序,修改为使用引用传递参数,修改如下:
#include <iostream>
using namespace std;
int swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
int a = 1024, b = 1100;
cout << "before a = " << a << " b = " << b << endl;
swap(a, b);
cout << "after a = " << a << " b = " << b << endl;
return 0;
}
程序运行后,控制台输出如下图所示:
这次,我们使用了引用传递,我们看到,同样实现了交换了两个变量的值。
传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。