为什么我的价值观不会交换?

xma*_*fin 0 c++ swap function

我应该写一个函数名double_swap,它接受两个双精度作为参数,并交换存储在这些参数中的值.该函数应该不返回任何值,所以我知道这意味着它必须是一个void函数.

例如,如果执行以下代码片段,

int main()
{
double x = 4.8, y = 0.7;
double_swap(x,y);
cout<<"x = "<<x<<" y = "<<y;
}
Run Code Online (Sandbox Code Playgroud)

输出将是:x = 0.7 y = 4.8

我写的程序不是交换价值.如果有人能指出我的错误,我将不胜感激.

#include <iostream>

using namespace std;

void double_swap(double x, double y)
{
        x = 1.9;
        y = 4.2;
}

int main()
{
        double x = 4.2, y = 1.9;
        double_swap(x,y);
        cout<<"x = "<<x<<" y = "<<y<<endl;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 5

您需要通过引用传递变量,以便将函数中的修改应用于调用站点中的变量.就像现在一样,你所做的只是修改一旦函数结束就会被销毁的副本.

更改

void double_swap(double x, double y)
Run Code Online (Sandbox Code Playgroud)

void double_swap(double& x, double& y)
Run Code Online (Sandbox Code Playgroud)

而不是硬编码值,让我们做一个真正的交换使用

void double_swap(double& x, double& y)
{
    double temp = x;
    x = y;
    y = temp;
}
Run Code Online (Sandbox Code Playgroud)

你也可以使用函数参数的指针,但是你的调用站点必须改为double_swap(&x,&y);,你必须记住引用函数中的指针.

虽然我们可以使用std::swap并让它为我们这样做,而不是完成所有这些.