使用指针形参交换两个整数的值

来源:互联网 发布:金税盘重装后数据没了 编辑:程序博客网 时间:2024/05/16 11:56

楼主是个小白,C++Primer看到第六章,做练习的时候遇到了点小问题,解决了以后到这里来跟大家分享一下。
题目是要求使用指正形参交换两个整数的值。
我心想,这还不简单,恩,开始动手了。

#include<iostream>#include<cstdlib>using namespace std;void exchange(int *p, int *q){    int *k =0;    k = p;    p = q;    q = k;}int main(){    int n = 0, i = 42;    int *p = &n;    int *q = &i;    exchange(p, q);    cout << *p << endl << *q<<endl;    return 0;}

运行以后发现值并没有被交换。。。。。
反复看书,看到书上有一段这样的解释:函数对所有形参的操作都不会影响实参。换句话说,上面的代码中的p,q的值都没有被改变。
为了验证这种说法,我在主函数中去掉了调用,把exchange中的内容放到了主函数中。

#include<iostream>#include<cstdlib>using namespace std;int main(){    int n = 0, i = 42;    int *p = &n;    int *q = &i;    int *k = 0;    k = p;    p = q;    q = k;    cout << *p << endl << *q<<endl;    return 0;}

运行之后发现值完成了交换,说明正是因为书上提到的原因,函数对形参的操作不会影响实参。
在调用时使用对指针的引用传递,就可以实现题目中的要求。

#include<iostream>#include<cstdlib>using namespace std;void exchange(int **p, int **q){    int *k = *p;    *p = *q;    *q = k;}int main(){    int n = 0, i = 42;    int *p = &n;    int *q = &i;    exchange(&p, &q);    cout << *p << endl << *q<<endl;    return 0;}

这样就大功告成啦:逃)

0 0