Call-by-Value が元の変数を変更しないのはなぜですか?

DDD
リリース: 2024-11-21 18:43:13
オリジナル
784 人が閲覧しました

Why Doesn't Call-by-Value Modify the Original Variable?

値による呼び出し: 制限について理解する

入力の値を変更しようとするこの値による呼び出しの例を考えてみましょう。関数内のパラメータ:

#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 &amp;value);
ログイン後にコピー

関数シグネチャで & を使用することにより、元の変数への参照 (エイリアス) を作成します。参照に加えられた変更は、元の変数も変更します。

参照渡しの例

void changeValue(int &amp;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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート