【知识点】
不要企图通过改变形参的值而使实参的值改变。
【错误算法代码】
分析可得,此错误swap函数的函数体功能是对p1和p2进行交换。
且观察易知,此错误swap函数的形参是p1和p2。故此swap函数企图通过改变形参的值而使实参的值改变,所以不可实现两数交换。
#include <iostream>
using namespace std;
void swap(int p1,int p2){
int t=p1;
p1=p2;
p2=t;
}
int main() {
int x,y;
cin>>x>>y;
cout<<"Before: "<<x<<" "<<y<<endl;
swap(x,y);
cout<<"After: "<<x<<" "<<y<<endl;
return 0;
}
/*
in:
12 8
out:
Before: 12 8
After: 12 8
*/
【正确算法代码】
分析可得,此正确swap函数的函数体功能是对*p1和*p2进行交换。
且观察易知,此正确swap函数的形参是p1和p2,而不是*p1和*p2。故此swap函数并不没有企图通过改变形参的值而使实参的值改变,所以可实现两数交换。
#include <iostream>
using namespace std;
void swap(int* p1,int* p2){
int t=*p1;
*p1=*p2;
*p2=t;
}
int main() {
int x,y;
cin>>x>>y;
cout<<"Before: "<<x<<" "<<y<<endl;
swap(x,y);
cout<<"After: "<<x<<" "<<y<<endl;
return 0;
}
/*
in:
12 8
out:
Before: 12 8
After: 8 12
*/