谈一下交换值之后并不能返回预料的结果

#include <iostream>

void exchange(int a,int b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}

int main()
{
    int n1 = 1;
    int n1 = 2;
    exchange(n1,n2);
    std::cout<<n1<<" "<<std::endl;
return 0; }

这是一个很典型的错误交换变量的做法。

为什么会不行呢,因为n1,n2 的变量分别放在一个地址上,然后我们将n1,n2的变量作为形参传到exchange()的函数里,我们在里面进行了变量的互换,然而我们发现最终打印的还是1和2,而不是2和1

因为我们传的只是值,尽管看起来我们把值互换了,但是却没有影响到n1和n2的地址里的值,也就是说n1和n2的值是放在一个地址里,而我们并没有通过地址找到这两个值进行互换,最终还是打印的地址里的值。

我们只有将两个值的地址传给函数,然后通过修改地址里的值来达到互换的效果。

 

修改之后的代码:

void exchange(int *a,int *b)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

int main()
{
    int n1 = 1;
    int n1 = 2;
    exchange(&n1,&n2);
    std::cout<<n1<<" "<<std::endl;

    return 0;
}

 

posted @ 2020-04-10 14:22  strive-sun  阅读(145)  评论(0编辑  收藏  举报