2. 引用的函数传递

引用可以作为函数的形式参数,在函数内部可以使用引用的形参变量访问实参。可以避免指针解引用的麻烦,并且使程序的可读性变得更好。

对于函数的实参比较庞大,比如一个结构体,如果以传值的方式传递到函数内部会进行内容复制,传递效率比较低;在这种情况下,可以考虑传址传引用

传引用示例

// filename: ref_args.cpp
#include <iostream>

using namespace std;

void myswap(int &pa, int &pb) {
    cout << "void myswap(int &pa, int &pb)" << endl;
    int temp = pa;
    pa = pb;
    pb = temp;
}
void myswap(float &pa, float &pb) {
    cout << "void myswap(float &pa, float &pb)" << endl;
    float temp = pa;
    pa = pb;
    pb = temp;
}

int main(int argc, char * argv[]) {
    int x = 100, y = 200;
    float a = 3.14, b = 2.71828;
    myswap(x, y);
    myswap(a, b);
    cout << "x:" << x << " y:" << y << endl;
    cout << "a:" << a << " b:" << b << endl;

    return 0;
}

编译和运行结果如下

weimz@mzstudio:~$ g++ -o ref_args ref_args.cpp
weimz@mzstudio:~$ ./ref_args 
void myswap(int &pa, int &pb)
void myswap(float &pa, float &pb)
x:200 y:100
a:2.71828 b:3.14

可见两个 myswap 函数 都可以实现交换变量值的目的,且在函数内部通过引用的形参变量直接修改实参的变量还是比较方便的。

实验:

能否定义一个整型的引用 rn 去引用一个常数 100,如:int & rn = 100;。这样编译器会报错。报错的原因是引用 rn100 的类型不匹配。请问如何修改才能让 rn 变量绑定常数 100(请借助于人工智能解决此问题)。