尽管一切看起来都很好,但不会交换值

Despite everything looks fine, values are not swapped

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

这是我的代码:

#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

请帮助我了解原因。感谢任何帮助。

您正在复制参数 ab。将它们更改为参考。

void mySwap(int & a, int & b)

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

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

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

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

#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;