1
#include <iostream>

void swap(int &pi, int &pj){

    std::cout << "In function swap: " <<  &pi << " " << &pj << "\n";

        int temp = pi;
        pi = pj;
        pj = temp;
}

int main(){

        int i = 10, j = 20;
        int *pi = &i, *pj = &j;
        swap(pi, pj);

        std::cout << *pi << " " << *pj;
        return 0;
}

上記のプログラムでは、コンパイル エラーは発生しません。(POINTER TO REFERENCEタイプではなく関数を交換しますが)適切な出力を提供します。しかし、 「スワップ」関数内で印刷しようとしているものは何でもconsole に印刷されません。誰でも理由を説明できますか?

4

3 に答える 3

9

std::swap独自のスワップ ルーチンを呼び出す代わりに、2 つのポインターを交換するために使用しているようです。あなたusing namespace std;が私たちに見せていない場所があると思いますか?スワップ ルーチンの名前を eg に変更してみて、my_swap呼び出しがmy_swap機能するかどうかを確認してください (コンパイル エラーで失敗するはずです)。

于 2012-07-30T13:35:24.600 に答える
0

プログラムをコンパイルできたとしても、すべてのコードを公開する必要はありません。投稿したこのコード スニペットは、int への参照を期待する関数 swapm に int* 型のオブジェクトを渡そうとしているため、コンパイルされません。

あなたのコードがコンパイルされるなら、'using namespace std;' を含めているのではないかと思います。元のコードのどこにでも。

于 2012-07-30T13:47:20.680 に答える
-1

参照によって渡されているポインタのアドレスを取得しようとしています...私はあなたが何をしているのかを完全には理解していないと思います。C ++の参照渡し機能を使用すると、参照を渡すことができるため、ポインターは必要ありません。コードは次のようになります。

#include <iostream>

void swap(int &i, int &j){

    std::cout << "In function swap: " <<  i << " " << j << "\n";

        int temp = i;
        i = j;
        j = temp;
}

int main(){

        int i = 10, j = 20;
        swap(i, j);

        std::cout << i << " " << j;
        return 0;
}
于 2012-07-30T13:37:35.117 に答える