1. ホーム
  2. c++

[解決済み] シンプルなC++スワップ関数

2022-03-06 20:03:40

質問

このような関数で、2つの数値を入れ替える場合、[swap]は動作せず、(プロトタイプでポインタを宣言し、main()でそれぞれの変数のアドレスを渡せばできることは知っています)、配列ではポインタやアドレスを渡さずに動作するのはなぜでしょうか?

動作しない

void num_exchange(int m, int n);

int main(){

int num1 = 5;
int num2 = 6;

num_exchange(num1 , num2 );

cout << "num1 =" << num1 << endl;
cout << "num2 =" << num2 << endl;

return 0;
}

void num_exchange(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
}

作品紹介

void arr_exchange(int [], int);

int main(){


int n[7] = { 0, 0, 0, 0, 0, 0, 0 };

arr_exchange(n, 7);
for (int i = 0; i < 7; i++)
    cout << n[i] << " ";

return 0;
}

void arr_exchange(int x[], int){
for (int i = 0; i < 7; i++)
    x[i] = 1;
}

解決方法は?

void num_exchange(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
}

を変更します。 コピー は入力された整数の あなたのコードが動作するようにするには

void num_exchange(int& m, int& n){
int temp;
temp = m;
m = n;
n = temp;
}

の代わりに & を1行目に記述しています)。これは 参照渡し . 一般的には std::swap で入れ替えができます。

void arr_exchange(int x[], int){
for (int i = 0; i < 7; i++)
    x[i] = 1;
}

が動作するのは、C++の場合

void arr_exchange(int x[], int){

は、以下と同等です。

void arr_exchange(int* x, int){

つまり、ここではポインタが渡されるため、元のデータが変更される。