【参数传递方式的几点归纳】
以实现交换功能的函数为例
1、单纯的值传递:
#include<iostream>
using namespace std;
void swap(int a, int b) {
int t = a;
a = b;
b = t;
cout << a << " " << b<<endl;//这里输出的是swap函数中的a,b
}
int main() {
int a, b;
cin >> a >> b;
swap(a, b);
cout << a <<" "<< b;//这里输出的是main函数中的a,b的值
}
可以看到上一行是swap函数中的值,其a,b(形参)的值得到了交换,
后一行是main函数中的值,其a,b(实参)的值并未交换。
2、如果想让实参也发生改变:
#include<iostream>
using namespace std;
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
cout << *a << " " << *b<<endl;//这里输出的是swap函数中的a,b
}
int main() {
int a, b;
cin >> a >> b;
swap(&a, &b);
cout << a <<" "<< b;//这里输出的是main函数中的a,b的值
}
输出样例如下:
可以看到此时swap函数与main函数中a,b的值都发生了交换
3、传地址给指针,不修改主函数中变量的值,只变换指针
#include<iostream>
using namespace std;
void swap(int *a, int *b) {
int *t = a;
a = b;
b = t;
cout << *a << " " << *b<<endl;//这里输出的是swap函数中的a,b
}
int main() {
int a, b;
cin >> a >> b;
swap(&a, &b);
cout << a <<" "<< b;//这里输出的是main函数中的a,b的值
}
总结:如果想要改变实参的值,可以采用第二种方法,即传入地址。