为什么我的值不会交换?

Why won't my values swap?

本文关键字:交换 我的 为什么      更新时间:2023-10-16

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

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

int main()
{
double x = 4.8, y = 0.7;
double_swap(x,y);
cout<<"x = "<<x<<" y = "<<y;
}

输出将是: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;
}

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

改变

void double_swap(double x, double y)

void double_swap(double& x, double& y)

此外,与其硬编码值,不如使用

void double_swap(double& x, double& y)
{
    double temp = x;
    x = y;
    y = temp;
}

您也可以为此使用函数参数的指针,但随后您的调用站点必须更改为double_swap(&x,&y);并且您必须记住引用函数中的指针。

与其做所有这些,不如我们只使用std::swap让它为我们做这件事。

在c++中调用函数时,有3种方式可以传递参数。第一个是通过复制,它只复制参数中的变量,然后删除它们。

 void double_swap(double x, double y)

第二个是通过引用,其中参数引用真正的变量(你想要什么)。

 void double_swap(double& x, double& y)

最后一个是按地址传递变量地址。

   void double_swap(double* x, double* y)