数据结构引用调用---传参“&“的引用(值传参,地址传参,引用传参区别)

标准的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,更为方便。

猜你喜欢

转载自blog.csdn.net/weixin_61866141/article/details/126750821