値による呼び出し: 制限について理解する
入力の値を変更しようとするこの値による呼び出しの例を考えてみましょう。関数内のパラメータ:
#include <iostream> using namespace std; void changeValue(int value); int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; } void changeValue(int value) { value = 6; }
驚くべきことに、私たちの努力にもかかわらず、出力は 5 のままです。これを 6 に変更します。この動作は、C/C の値による呼び出しの基本原則に由来しています。
値による呼び出しの本質
値による呼び出しでは、元の変数のコピーが引数として関数に渡されます。関数内でこのコピーに加えられた変更は、そのローカル スコープに限定されたままで、元の変数には影響しません。
この例では、関数changeValueはmain()から値のコピーを受け取ります。このコピーに加えられた変更は、元の値変数には影響しません。
解決策: 参照渡し
関数内から元の変数を変更するには、次のようにします。参照渡しを採用する必要があります。 C/C では、これは次のように表されます。
void changeValue(int &value);
関数シグネチャで & を使用することにより、元の変数への参照 (エイリアス) を作成します。参照に加えられた変更は、元の変数も変更します。
参照渡しの例
void changeValue(int &value) { value = 6; }
ここで、main() で changeValue を呼び出すと、値への参照が関数に渡され、元の値を変更できるようになります。
int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
このシナリオでは、出力は正しく反映されます。変更された値: 6.
以上がCall-by-Value が元の変数を変更しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。