0

関数内の指定された 2 つの要素を交換する 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;
}
4

5 に答える 5

1
b=&x;

する必要があります

b=&y;

また、ローカル コピーを交換しています。sum次のようにする必要があります。

void sum(int& x, int& y)

また、これはすでに存在します。と呼ばれていstd::iter_swapます。

于 2013-04-17T12:32:24.987 に答える
0

スワップではなく、合計関数では、x と y を値で渡し、後で値のコピーを変更および交換してこれを修正します。これを変更する必要があるとvoid sum(int x, int y){void sum(int& x, int& y){x と y が参照によって渡され、合計がそれらを更新できます。

于 2013-04-17T12:31:32.057 に答える
0

ポインターと参照について学習しているだけだと思います。

関数swapは 2 つのポインターの内容を交換します。あなたが入力し、stdにもスワップ機能があることに注意してくださいusing namespace std。intへのポインターを渡すと、あなたのものはより厳密に一致しますが、ソースからそれを削除することをお勧めします。

呼び出されsumた関数は、実際には何も加算または追加しないため、明確な誤称です。ポインターバージョンを呼び出してスワップを試みます。

特定のバグを修正するには、パラメーターを参照によって取得する必要がありb、x ではなく y を指す必要があります。

于 2013-04-17T12:34:24.793 に答える
0

「間違っている」とは、最後の cout の出力に期待どおりに「a」と「b」が表示されないことを意味していると思います。しかし、それらを値で「合計」に渡しています。

于 2013-04-17T12:32:12.083 に答える