zoukankan      html  css  js  c++  java
  • 谈一下交换值之后并不能返回预料的结果

    #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;
    }
  • 相关阅读:
    cmd 一键获取 所有连接过的wifi 密码
    MYSQL注入语句
    Web安全篇之SQL注入攻击
    Kali Linux 不能联网上网 解决方法
    php杂项
    laravel下的数据序列化
    填充数据
    css
    array
    GD库常用函数
  • 原文地址:https://www.cnblogs.com/strive-sun/p/12673251.html
Copyright © 2011-2022 走看看