#M8404. 传递参数

传递参数

传值


#include<bits/stdc++.h>
using namespace std;
void Swap(int a, int b) {
	int t = a;
	a = b;
	b = t;
	cout << a << " " << b << endl;
	return;
}
int main() {
	int x, y;
	cin >> x >> y;
	Swap(x, y); // 调用函数,传递 x 和 y 的值
	cout << x << " " << y << endl;
	return 0;
}

原理: 传值过程中实际上是复制 x 的值至形参 a,复制 y 的值至形参 b,在 Swap 函数内部只是让 a 与 b 的值互换,而并未使得主函数的 x 和 y 交换。

结论:传值过程中修改形参的值并不影响实参的情况!


传引用


#include<bits/stdc++.h>
using namespace std;
void Swap(int &a, int &b) {
	int t = a;
	a = b;
	b = t;
	cout << a << " " << b << endl;
	return;
}
int main() {
	int x, y;
	cin >> x >> y;
	Swap(x, y); // 调用函数,传递 x 和 y 的引用 
	cout << x << " " << y << endl;
	return 0;
}

在数据类型和变量名称间添加 & 后,使得该变量成为引用变量。引用并不是一个独立定义的变量或其他值,而是一个对已存在的变量或其他值取了一个别名。

可以将别名理解为取外号,如“码小虎”被取外号叫做“马虎”...

这一期间编译器不会开辟新的空间,它与其引用对象共同使用同一块空间,对别名进行操作会影响引用对象。

结论:传引用中修改形参的值会影响实参的情况!


传地址


调用函数时把主函数中实参的地址传递给函数的形参,直接对实参地址所指向的内存空间进行操作。

#include<bits/stdc++.h>
using namespace std;
void Swap(int *a, int *b) {
	int t = *a;
	*a = *b;
	*b = t;
	cout << *a << " " << *b << endl;
	return;
}
int main() {
	int x, y;
	cin >> x >> y;
	Swap(&x, &y); // 调用函数,传递 x 和 y 的地址  
	cout << x << " " << y << endl;
	return 0;
}

结论:传地址过程中修改形参发生变化会影响实参的结果!