【问题标题】:Why won't my values swap?为什么我的价值观不会交换?
【发布时间】:2016-03-16 20:18:51
【问题描述】:

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

【问题讨论】:

    标签: c++ function swap


    【解决方案1】:

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

    改变

    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(&amp;x,&amp;y);,并且您必须记住在函数中引用指针。

    虽然我们可以使用 std::swap 并让它为我们做这一切,但我们可以不用做所有这些。

    【讨论】:

    • 机身也有问题
    【解决方案2】:

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

     void double_swap(double x, double y)
    

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

     void double_swap(double& x, double& y)
    

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

       void double_swap(double* x, double* y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多