第1章 「やさしい入門」
1.8 引数  値による呼び出し(call by value)

2021年9月4日

関数の引数について解説します。
C言語の関数の引数は値による呼び出し(call by valude)と呼ばれます。
簡単に言うと関数内で値を変更しても呼び出し側には影響を与えません。
具体的にはサンプルプログラムを使って説明します。

プログラムの目的

与えられた引数の値を変更する関数を用意し、呼び出し元の値が変わっていないことを確認する。

ソースコード

解説

メイン関数からプログラムの流れを追っていきます。
ステップ送りがわかりやすいと思いますので以前ご説明したようにデバッガでステップ送りをしましょう。
コンパイルが終了したらF11キーを押して下さい。
mainの頭で停止しているはずです。

①最初のpirintfの行で停止させvalの値を確認。
ウオッチで値を確認できます。
valの値は10になっています。

②ステップ送りでsample関数まで進める
sample関数の最後ではvalの値が20であることを確認して下さい

③mainに戻るとvalの値は10に戻っています

valの値がmain関数とsample関数で変わってしまったので不思議に思われるかも知れません。
理由はsample関数のint valとmain関数のint valは別の変数だからです。
sample関数が呼ばれるときにsample関数の変数(引数)int valにmain関数のint valの値のみが渡されます。
これが値による参照(call by value)です。
したがってsample関数内の変数valの値が変更されてもmainのvalには影響を与えません。

動作の確認

実行させると以下のように表示されます。

val = 10
val = 10

以上です、今回はここまで

※本プログラム教室はK&Rの「プログラミング言語C」をベースに進めています。