苦C 15章3節終了。
今節で重要な「参照渡し」についていまいちピンとこなかったのでCopilotに質問してみた。
変数を引数にした場合に、呼び出した関数内からは引数に指定した変数の変更が効かないので、メモリアドレスを引いて直接編集する、ってことですか?
はい、まさにその通りです!変数をそのまま引数に渡すと「値渡し」になるため、関数内で操作できるのはその変数のコピーだけです。元の変数には影響を与えられません。
そこで「メモリアドレス」を利用することで、変数のコピーではなく元の変数そのものを操作できるようにする、という仕組みです。
具体的には、「&」演算子を使って変数のアドレスを取得し、そのアドレスをポインタ型の引数として渡します。そして関数内でポインタを通じて元の変数にアクセスし、直接編集する形になります。この方法は「参照渡し」と呼ばれます。
例をもう一度整理すると:
void changeValue(int *x) {
*x = 100; // ポインタを使い、アドレスを通じて元の変数を書き換える
}
int main() {
int a = 10;
changeValue(&a); // aのアドレスを渡す
printf(“a = %d\n”, a); // aが変更されて100になる
return 0;
}
ここで重要なのは、関数に渡されたアドレスを基に「元の変数そのもの」を操作する点です。この仕組みを理解すると、データを柔軟に扱えるようになります。ご質問ありがとうございます。さらに深掘りしたい場合はぜひ教えてくださいね!
ということで、今日も優秀なCopilot先生でした。
コメント