C++ 把引用作为参数
我们已经讨论了如何使用指针来实现引用调用函数。下面的实例使用了引用来实现引用调用函数。
实例
#include <iostream>
using namespace std;
// 函数声明
void swap(int& x, int& y);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;
/* 调用函数来交换值 */
swap(a, b);
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
return 0;
}
// 函数定义
void swap(int& x, int& y)
{
int temp;
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
return;
}
当上面的代码被编译和执行时,它会产生下列结果:
交换前,a 的值: 100 交换前,b 的值: 200 交换后,a 的值: 200 交换后,b 的值: 100

文人墨客
举个例子,有这么一个结构体:
struct Demo { char name[10000]; int count; }; int main() { Demo my_demo = {0}; Demo *my_demo_p = &my_demo; Demo &my_demo_ref = my_demo; // 方式1:传递实参 func1(my_demo); // 方式2:传递指针 func2(my_demo_p); // 方式3:传递引用 func3(my_demo_ref); return 0; } 如上所示,参数传递可以有三种方式,则三种函数可以这样定义: // 方式1:传递实参 void func1(Demo demo) { cout << demo.name; } // 方式2:传递指针 void func2(const Demo *demo_p) { cout << demo->name; } // 方式3:传递引用 void func3(const Demo &demo_ref) { cout << demo.name; }可以看出,引用和实参的使用方式很像,但注意以下几点:
引用和指针也很像,它们都不会创建副本,因此效率都很高。它们的主要区别在于:
PS: 在代码中加上 const 关键字的目的,是不希望 func2 和 func3 去修改原始数据,因为函数仅仅是为了打印出 name。
文人墨客
以引用作为参数的函数,可以把变量传入,但不能传入常量。
#include <iostream> using namespace std; int hls(int& a1, int& a2, int& b1, int& b2) //定义行列式函数 { int temp; temp=a1*b2-a2*b1; return temp; } int main() { int x1=11; int x2=9; int y1=15; int y2=14; //定义矩阵 int result; //行列式运算结果 result=hls(x1,x2,y1,y2); //result=hls(11,9,15,14)会报错 cout << result << endl; return 0; }文人墨客
引用作为函数参数
C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。
C++ 函数传参:
(1)将变量名作为实参和形参。这时传给形参的是变量的值,传递是单向的。如果在执行函数期间形参的值发生变化,并不传回给实参。因为在调用函数时,形参和实参不是同一个存储单元。// 同 c
(2) 传递变量的指针。形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)指向实参变量单元。这种通过形参指针可以改变实参的值。// 同 c
(3) C++提供了 传递变量的引用。形参是引用变量,和实参是一个变量,调用函数时,形参(引用变量)指向实参变量单元。这种通过形参引用可以改变实参的值。