为什么赢得我的价值观?

时间:2016-03-16 20:18:51

标签: c++ function swap

我应该编写一个函数名称 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;
}

2 个答案:

答案 0 :(得分:5)

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

更改

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并让它为我们这样做而不是完成所有这些。

答案 1 :(得分:0)

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

[0-9]+

第二个是参考文献,其中参数表示真实变量(你想要的是什么)。

 void double_swap(double x, double y)

最后一个是通过地址传递变量的地址。

 void double_swap(double& x, double& y)