描述
填空,使得程序输出结果是:
5,3
#include <iostream>
using namespace std;
void swap(
)
{
int * tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 3,b = 5;
int * pa = & a;
int * pb = & b;
swap(pa,pb);
cout << *pa << "," << * pb;
return 0;
}
输入
无
输出
5,3
样例输入
无
样例输出
5,3
来源
Guo Wei
分析
此处如果单纯的只传入void swap(int *a,int *b)
那么我们会发现其实两个值在输出时,并没有发生交换,这是因为在子函数中,如果我们不改变指针指向得值,那么即使改变指针得指向也不会影响原函数得值。因此,此处最好将主函数中传过来得地址进行强行转换,如void swap(int *(&a),int *(&b))
,那么a和b就是pa和pb的地址了,相当于就是pa和pb,完全一样,可以进行交换指针了。
解
void swap(int *(&a),int *(&b))