为什么我的价值观不会交换?
Why won't my values swap?
我应该编写一个函数名称 double_swap,它接受两个双精度数作为参数并交换存储在这些参数中的值。该函数应该 return 没有值,所以我知道这意味着它必须是一个 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)
我应该编写一个函数名称 double_swap,它接受两个双精度数作为参数并交换存储在这些参数中的值。该函数应该 return 没有值,所以我知道这意味着它必须是一个 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)