ホームページ > バックエンド開発 > C++ > Call-by-Value を使用して C/C 関数の入力パラメータを変更できないのはなぜですか?

Call-by-Value を使用して C/C 関数の入力パラメータを変更できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-13 15:49:02
オリジナル
857 人が閲覧しました

Why Can't I Modify Input Parameters in C/C   Functions Using Call-by-Value?

値による呼び出しが入力パラメーターの更新に失敗する理由

C/C では、関数パラメーターは通常、値によって渡されます。入力変数のコピーが作成され、関数に送信されます。これは、関数内で行われた変更はローカル コピーにのみ影響し、元の変数には影響しないことを意味します。

次の例を考えてみましょう。

#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;
}
ログイン後にコピー

このコードは、入力パラメータの値を変更しようとしています。 changeValue 関数内で。ただし、関数がローカル コピーを 6 に変更しても、出力は 5 のままです。

これは、changeValue 関数が main() から value 変数のコピーを受け取るためです。この関数は、main() 内の元の変数から独立したこのローカル コピーに対して動作します。したがって、関数内で行われた変更は、元の変数には引き継がれません。

参照呼び出しを使用して入力パラメータを変更する

元の変数を変更するには関数内からは参照渡しを使用する必要があります。これにより、関数は単なるコピーではなく、メモリ内の実際の変数にアクセスして変更できるようになります。

#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;
}
ログイン後にコピー

この例では、changeValue 関数は、アンパサンド (& で表される) 値変数への参照を取得します。 )。これにより、関数は元の変数に直接アクセスして変更できるようになります。その結果、関数が値を 6 に設定すると、main() 内の実際の変数が変更され、出力にはその変更が正しく反映されます。

以上がCall-by-Value を使用して C/C 関数の入力パラメータを変更できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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