前節では、関数に数値を渡す方法を解説しましたが、
今回は、その逆に関数から数値を返す方法を解説します。
実は、sum関数は、すでに数値を返すように作られています。
とりあえず、前節のsum関数を眺めてみてください。
int sum(int min, int max)
{
printf("%d\n", (min + max) * (max - min + 1) / 2);
return 0;
}
注目ポイントは2か所です。
1つは、関数名の前についている、intという文字列です。
これは、main関数でそうなっていたのを真似しただけなのですが、
実は、これは、関数から返る数値の型を示しています。
もうひとつのポイントは、return文です。
今まで、とくに何も考えずに関数の最後には必ずつけてきましたが、
実は、このreturn文には、数値を返すという機能があります。
つまり、このsum関数は、int型の数値 0 を返すことになっていたのです。
このような、関数から返ってくる数値を、
戻り値(関数値)と呼ぶことがあります。
【戻り値】
関数から返される数値。
計算結果か、あるいはエラーの有無を示す数値であることが多い。
呼び出し元で戻り値を知りたい場合には、変数に代入する必要があります。
sum関数の戻り値を、変数valueに代入するには、次のようにします。
この戻り値を使えば、計算結果を表示するだけではなく、
呼び出し元に数値として教えることができます。
呼び出し元では、それを表示したり計算に使ったりできます。
次のプログラムは、計算結果を返すようにsum関数を改造した例です。
#include <stdio.h>
int sum(int, int); /* プロトタイプ宣言 */
int main(void)
{
int value;
value = sum(50, 100);
printf("%d\n", value);
return 0;
}
int sum(int min, int max)
{
int num;
num = (min + max) * (max - min + 1) / 2;
return num;
}
このプログラムの実行結果は次の通りになります。
先ほどと結果は変わりませんが、今回のsum関数は計算結果を返すだけであり、
結果の表示はmain関数でprintf関数を使って行っています。
必要であれば、main関数で戻り値を別の計算に使うことも可能です。
前節で解説した引数においては、複数の引数を使うことが可能でした。
では、当然、戻り値でも・・・、と言いたいのですが、そうはいきません。
なんと、
戻り値は1つだけしか返すことが出来ないのです。
そうなっている以上、戻り値は1つであきらめるしかありません。
実は、引数で数値を返すワザもありますが、これは後回しにします。
引数の場合、呼び出すときに必ず指定する必要がありましたが、
戻り値は無視してしまってもかまいません。
実を言えば、printf関数も、何文字表示したかという情報を返してきますが、
はっきり言って、そんなのどうでもいい情報なので、無視してきたのです。
なお、戻り値にも、intの他にdoubleなど、好きな型を使うことができます。
また、戻り値を返さない関数を作ることも可能です。
その場合、関数名の前に、voidを指定します。
ごくごく単純な関数であれば、戻り値が不要なことは意外に多いのです。