ホームページ >バックエンド開発 >C++ >C/C で `changeValue(value)` が `value` を変更しないのはなぜですか?

C/C で `changeValue(value)` が `value` を変更しないのはなぜですか?

DDD
DDDオリジナル
2024-11-16 08:47:03361ブラウズ

Why Does `changeValue(value)` Not Change `value` in C/C  ?

値による呼び出しの難問: 値保持パズルを解く

C/C では、関数のパラメーターは本質的に値によって渡されます。 。これは、元の変数自体ではなく、元の変数のレプリカが関数に渡されることを意味します。次のコード スニペットに示されているように、この動作は混乱を招く可能性があります:

void changeValue(int value) {
  value = 6;
}

int main() {
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

このコードを実行すると、出力が「値は 6」であると予想されるかもしれません。関数呼び出しの後。ただし、驚くべきことに、出力は「値は 5」のままです。この動作の理由は、値による呼び出しの複雑さにあります。

関数changeValue()が呼び出されると、値5のコピーが作成され、関数に渡されます。これは、関数内で値 6 がコピーに割り当てられ、元の値 5 は変更されないことを意味します。

この問題を修正して元の変数を変更するには、参照による呼び出しに頼る必要があります。この手法には、元の変数への参照を関数に渡すことが含まれます。この場合、関数は呼び出し関数の変更を反映して元の値を変更できます。

void changeValue(int& value) {
  value = 6;
}

int main() {
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

コードを実行すると、出力は「値は 6」になります。これは、値による呼び出しと参照による呼び出しの区別と、プログラムの意図された動作に基づいて適切な方を選択することの重要性を強調しています。

以上がC/C で `changeValue(value)` が `value` を変更しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。