C言語を学び始めると、関数の最後に登場するreturn文の意味で混乱する人は少なくありません。特に「returnで返している変数を、呼び出し元で直接使っていないように見える」という疑問は、関数と戻り値の仕組みを理解する上で重要なポイントです。
この記事では、C言語のreturn文がなぜ必要なのか、戻り値がどのように呼び出し元へ渡されるのかを、具体的なコード例を使って解説します。
C言語のreturn文は何をしているのか
C言語のreturn文は、関数で計算した結果や処理結果を、関数を呼び出した場所へ返すために使われます。
例えば、商品の合計金額を計算する関数を作った場合、関数内で計算した金額をreturnで返すことで、呼び出し元のmain関数などでその結果を利用できます。
重要なのは、returnする変数そのものを呼び出し側で使う必要はないという点です。returnで返されるのは「変数」ではなく、その変数に入っている値です。
質問のコードでreturn kingakuの意味を確認する
例として、次のようなコードを考えます。
#include <stdio.h>
int fruits(int apple);
int main(void){
int hoge;
hoge = fruits(5);
printf("%d", hoge);
return 0;
}
int fruits(int apple){
int kingaku;
kingaku = apple * 300;
return kingaku;
}
このプログラムでは、fruits関数に5が渡されます。するとappleには5が入り、kingakuには5×300の計算結果である1500が代入されます。
ここでreturn kingaku;と書くことで、fruits関数は1500という値を呼び出し元へ返します。そしてmain関数の以下の部分で受け取っています。
hoge = fruits(5);
つまり、この1行は実際には次のような流れになります。
- fruits(5)を実行する
- fruits関数内で1500を計算する
- return kingakuによって1500を返す
- hogeに1500を代入する
- printfでhogeの1500を表示する
そのため、kingakuをmain関数で直接使わなくても問題ありません。kingakuはfruits関数の中だけで存在する一時的な変数だからです。
なぜkingakuではなくhogeを使うのか
C言語では、関数内で作ったローカル変数は、その関数の中でしか利用できません。
今回の場合、kingakuはfruits関数の中で宣言されています。
int fruits(int apple){
int kingaku;
}
このkingakuはfruits関数専用の変数です。そのためmain関数からは直接アクセスできません。
もしmain関数で計算結果を使いたい場合は、returnで値だけを渡します。そして、その値をhogeという別の変数で受け取ります。
例えば、別の名前の商品計算でも同じ仕組みになります。
int price; price = fruits(10);
この場合でもfruits関数から返ってくる値は「kingakuという変数」ではなく、「計算された3000という値」です。受け取る側はpriceという名前の変数でも問題ありません。
returnしない場合はどうなるのか
もしreturnを書かなかった場合、計算したkingakuの値は関数の外へ渡りません。
例えば以下のようなコードでは、fruits関数内で1500を計算してもmain関数では利用できません。
int fruits(int apple){
int kingaku;
kingaku = apple * 300;
}
この場合、kingakuは関数終了と同時に消えてしまいます。せっかく計算した結果を他の場所で使えないため、returnによって値を渡す必要があります。
関数は「何かを計算する場所」、returnは「計算結果を外へ渡す出口」と考えると理解しやすくなります。
戻り値は変数ではなくデータを渡している
初心者が混乱しやすいポイントは、「return kingaku」と書いてあるため、kingakuという変数自体を渡しているように感じてしまうことです。
しかし実際には、returnしているのはkingakuという箱ではなく、その箱の中に入っている1500という値です。
イメージすると、kingakuという箱に1500円が入っていて、その箱の中身だけをmain関数へ渡している状態です。main関数では、その1500円をhogeという別の箱に入れています。
returnを使うメリット
returnを使うことで、同じ処理を何度も利用できるようになります。
例えば商品の金額計算をする場合、main関数ですべて計算することもできますが、専用の関数にしておけば必要な場所から呼び出せます。
実際のプログラムでは、計算結果、入力チェックの結果、データ取得結果など、多くの場面で戻り値が利用されています。
まとめ
C言語のreturn文は、関数内で計算した結果を呼び出し元へ渡すための仕組みです。
今回の例では、return kingakuによってkingakuという変数そのものを渡しているのではなく、kingakuに入っている1500という値を返しています。
そのためmain関数ではkingakuではなく、戻ってきた値を受け取ったhogeを使います。関数内の変数と戻り値の違いを理解すると、C言語の関数の仕組みがより分かりやすくなります。


コメント