我在函数中给出了两个元素,写了一个名为swap to swap的函数。但是当我在另一个函数中使用它时,它不起作用。如何让它发挥作用?
#include <iostream>
using namespace std;
void swap(int *a, int * b){
int temp=*a;
*a=*b;
*b=temp;
}
void sum(int x, int y){
int *a;
a = &x;
int *b;
b=&x;
swap(a,b);
//cout << x << endl << y << endl;
}
int main(){
int a=0, b=1;
//swap(a,b);
sum(a,b);
cout << a << endl << b << endl;
return 0;
}
答案 0 :(得分:1)
答案 1 :(得分:0)
x
和y
按值传递给sum
,因此swap
正在处理本地副本,而不是来自main
的实际变量。您还需要修改sum
和您对swap的调用:
void sum(int &x, int &y)
^ ^
{
// other code
swap(&x,&y);
^ ^
}
如果您离开,请拨打swap
这样的电话:
swap(x,y);
您实际上会拨打std::swap
。我将假设您将向sum
添加更多代码,否则该名称与其功能不一致。
答案 2 :(得分:0)
您探测不在交换中,但在sum函数中,您按x传递x和y并稍后修改和交换值的副本以解决此问题,您需要将void sum(int x, int y){
更改为void sum(int& x, int& y){
这将导致通过引用传递x和y,以便sum能够更新它们。
答案 3 :(得分:0)
我猜错'你的意思是指最后一个cout的输出没有像你期望的那样显示'a'和'b'。但是你按价值将它们传递给'总和'。
答案 4 :(得分:0)
我假设您只是在学习指针和参考资料。
你的函数swap
交换了两个指针的内容。请注意,您已经输入了using namespace std
并且std也有一个交换函数,因此我建议您从源代码中删除它,尽管如果您将指针传递给整数,那么您将更接近匹配。
你的函数叫sum
是一个明显的误称,因为它实际上并没有加总或添加任何东西,它试图通过调用指针版本进行交换。
要修复您的特定错误,必须通过引用获取其参数,b
应指向y,而不是x。