【问题标题】:Despite everything looks fine, values are not swapped尽管一切看起来都很好,但值并没有交换
【发布时间】:2020-06-25 07:40:59
【问题描述】:

我想写一个函数来交换两个整数。尽管一切看起来都很好,但值并没有交换。

这是我的代码:

#include <iostream>

using namespace std;

void mySwap(int a, int b)
{
  int temp;
  temp = a;
  a = b;
  b = temp;
}

int main()
{
  int a = 5, b = 4;
  mySwap(a, b);
  cout << a << ' ' << b << endl;
  return 0;
}
Output: 5 4

请帮我理解原因。任何帮助表示赞赏。

【问题讨论】:

  • 如果这不是纯粹出于教育目的,您可以使用std::swap

标签: c++ swap


【解决方案1】:

您正在复制参数a 和b。将它们更改为引用。

void mySwap(int & a, int & b)

【讨论】:

    【解决方案2】:

    您现在正在做的是交换变量的本地副本而不是实际变量。

    你需要做的,修复它是稍微改变你的函数(只需添加 &,这使它获取变量的引用而不是创建它们的本地副本)

    void mySwap(int &a, int &b)
    {
      int temp;
      temp = a;
      a = b;
      b = temp;
    }
    

    【讨论】:

      【解决方案3】:

      要直接使用main() 中作为参数传递的值,请使用如下所示的引用(后跟与符号&amp;):

      #include <iostream>
      
      void mySwap(int& a, int& b) // using reference here
      {
          int temp; // remove for alternative option described at the bottom
          temp = a; // a = a + b;
          a = b;    // b = a - b;
          b = temp; // a = a - b;
      }
      
      int main(void)
      {
          int a = 5, b = 4;
      
          mySwap(a, b); // passed 5, 4 and original values are manipulated.
      
          std::cout << a << ' ' << b << std::endl;
      
          return 0;
      }
      

      一旦你将变量作为函数参数传递,它最初也会改变。

      相反,如果你不使用它,程序只会创建两个只在函数内部可见的局部变量,那么即使交换它们,你也不会成功。


      在两个变量之间交换的另一种方法(没有临时变量):

      a = a + b;
      b = a - b;
      a = a - b;
      

      【讨论】:

        猜你喜欢
        • 2021-02-08
        • 2019-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多