
C言語入門|関数呼び出しは値に化ける
戻り値を使った関数呼び出しに慣れてきたころ、
多くの人が一度はこんなところで立ち止まります。
「関数を呼び出して、結果を変数に入れたいだけなのに、
なんだか書き方がピンとこない…」
このモヤっと感の正体は、
関数呼び出しが内部でどう扱われているのか を
まだ知らないことにあります。
この節では、
関数呼び出しの正体=値に化ける仕組み を
スッと理解できるように解きほぐしていきます。

よくある間違った考え方
まず、ありがちな思考パターンを見てみましょう。
「計算する関数で 80 と 15 を足して、
その結果を変数 result に入れたい」
- まずは関数を呼び出す
→ calc(80, 15) - 次に結果を変数に入れる
→ calc(80, 15) = result
この考え方、
気持ちはとてもよくわかります。
でも、これは C言語としては完全に逆 なんです。
正しい書き方は「代入文」
正しい書き方は、こちらです。
result = calc(80, 15);この1行を見て、
「どうして関数呼び出しが右辺に来るの?」
と感じた人もいるかもしれません。
ここでカギになるのが、
関数呼び出しは値に化ける という考え方です。
関数呼び出しの正体は演算子
実は、関数呼び出しは
演算子の働き によって処理されています。
関数呼び出しの形は、次のとおりです。
| 要素 | 内容 |
|---|---|
| 書式 | 関数名(引数リスト) |
| 正体 | 関数呼び出し演算子 |
| 結果 | 戻り値という「値」に化ける。 |
つまり、
calc(80, 15)という記述は、
- 関数を実行し
- 実行結果の戻り値に変換される。
という動きをしているのです。
( ) は最優先で評価される
関数名の後ろにある ( ) は、
演算子の中でも 最優先 で評価されます。
result = calc(80, 15);この式には、実は 2つの演算子 があります。
| 演算子 | 役割 |
|---|---|
| ( ) | 関数を実行し、値に化ける。 |
| = | 右辺の値を左辺に代入する。 |
評価の流れを図で表すと、次のようになります。
| 手順 | 処理内容 |
|---|---|
| ① | calc(80, 15) が実行される。 |
| ② | 計算結果 95 に化ける。 |
| ③ | result = 95 が実行される。 |
つまり、
result = calc(80, 15);は、内部的には
result = calc(80, 15);という ただの代入文 に変身しているわけです。
「代入文」だと考えれば迷わない
こう考えると、
左右を間違える理由がなくなります。
| 視点 | 理解 |
|---|---|
| 左辺 | 値を入れる箱 |
| 右辺 | 値に評価される式 |
関数呼び出しは
右辺に書ける値の一種 なんですね。
関数呼び出しはどこでも使える
関数呼び出しが「値に化ける」とわかると、
次のような書き方も自然に理解できます。
int total = calc(calc(5, 10), calc(20, 30));この式では、
| 呼び出し | 化ける値 |
|---|---|
| calc(5, 10) | 15 |
| calc(20, 30) | 50 |
| calc(15, 50) | 65 |
すべて 値として評価 されているだけです。
変数に代入しなくてもいい
戻り値は、
必ず変数で受け取らなければならないわけではありません。
printf("結果は%dです\n", calc(40, 2));この場合も、
- calc(40, 2) が実行され
- 戻り値が printf の引数として渡される
という流れになります。
関数呼び出しは、
ただ値に化けているだけ なのです。
まとめ:関数呼び出しは「値そのもの」
ここまでの話を整理しましょう。
| ポイント | 内容 |
|---|---|
| 関数呼び出し | 演算子による評価 |
| 結果 | 戻り値という値に化ける |
| 使い方 | 式の中で自由に使える |
関数は「命令」ではなく、
値を作る部品 として使える存在です。
この感覚が身につくと、
C言語の式の読み方が一気に楽になりますよ。
