在函数c ++中更改给定的函数参数

时间:2013-04-17 12:27:32

标签: c++ function pointers parameters

我在函数中给出了两个元素,写了一个名为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;
}

5 个答案:

答案 0 :(得分:1)

b=&x;

应该是

b=&y;

此外,您正在交换本地副本。 sum应该是:

void sum(int& x, int& y)

此外,这已经存在。它被称为std::iter_swap

答案 1 :(得分:0)

xy按值传递给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。