标准的C是不支持引用调用的传参方式,只能值传递或指针,而指针在使用过程中又过于繁琐。而在数据结构这么课中,核心是数据,为了便于对数据进行一系列的操作,比如增删改查,C++中增加了引用调用的参数传递方式。
输入两个数,并交换两数的值。先用C的值传参方式进行描述
#include <iostream>
using namespace std;
void swap(float m, float n) {
float t;
t = m;
m = n;
n = t;
}
int main () {
float a, b;
cin >> a >> b;
swap(a, b);
cout << "a:" << a << endl << "b:" << b;
}
运行结果:
可以看到,函数swap并没有完成a、b值的互换,这是因为在调用函数时,只是把ab的值进行了传递,swap函数对形参进行了操作,并没有改变实参。其内存关系如下:
因此,在C中为了避免此类错误,可以使用指针,进行地址传参,如下所示:
void swap(float *m, float *n) {
float t;
t = *m;
*m = *n;
*n = t;
}
int main () {
float a, b;
cin >> a >> b;
swap(&a, &b);
cout << "a:" << a << endl << "b:" << b;
}
运行结果:
将a、b的地址传过去实参也引起了变化,内存图如下:
使用指针进行编写程序有些繁琐,因此C++中用"&"进行引用调用
void swap(float &m, float &n) {
float t;
t = m;
m = n;
n = t;
}
int main () {
float a, b;
cin >> a >> b;
swap(a, b);
cout << "a:" << a << endl << "b:" << b;
}
运行结果:
"&"引用,是C++中提出来的一种新的引用调用的参数传递方式,即给实际变量起个外号,指的是变量本身,通过这个外号来引用实际的变量。传递引用给函数与传递指针的效果是一样的,形参变化也引起了实参的变化,但是比指针使用起来更加方便、高效。
在今后学习线性表、栈、队列的时候, SqList * l,C++中可以SqList & l,更为方便。