1. ホーム
  2. c++

[解決済み] C++ ポインタの交換

2022-02-01 12:35:13

質問

ポインターを交換する関数を作っているのですが、なぜこれがうまくいかないのかがわかりません。 スワップ関数でrとsをプリントアウトすると値が入れ替わっています。これは、pとqを参照渡ししているので、よくわからないコピーを操作しているのだと思われます。

void swap(int *r, int *s)
{
    int *pSwap = r;
    r = s;
    s = pSwap;
    return;
}

int main()
{
    int p = 7;
    int q = 9;  
    swap(&p, &q);
    cout << "p = " << p << "q= " << q << endl;
    return 0;
}

プリント:p = 7q = 9

解決方法は?

あなたの swap 関数では、ポインタの方向を変えるだけです。つまり、ポインタが指すオブジェクトを変更します(ここでは、具体的にはオブジェクトのアドレスです pq )。ポインタが指すオブジェクトは全く変更されません。

を使用することができます。 std::swap を直接入力します。または、以下のようにswap関数をコーディングします。

void swap(int *r, int *s)
{
   int temp = *r;
   *r = *s;
   *s = temp;
   return;
}