苦しんで覚えるC言語

関数から数値を返す


戻り値を返す関数


前節では、関数に数値を渡す方法を解説しましたが、
今回は、その逆に関数から数値を返す方法を解説します。

実は、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に代入するには、次のようにします。

value = sum(50,100);
この戻り値を使えば、計算結果を表示するだけではなく、
呼び出し元に数値として教えることが出来ます。
呼び出し元では、それを表示したり計算に使ったりできます。
次のプログラムは、計算結果を返すように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;
}
このプログラムの実行結果は次の通りになります。

3825
先ほどと結果は変わりませんが、今回のsum関数は計算結果を返すだけであり、
結果の表示はmain関数でprintf関数を使って行っています。
必要であれば、main関数で戻り値を別の計算に使うことも可能です。

目次に戻る

戻り値の制限


前節で解説した引数においては、複数の引数を使うことが可能でした。
では、当然、戻り値でも・・・、と言いたいのですが、そうはいきません。
なんと、戻り値は1つだけしか返すことが出来ないのです。

そうなっている以上、戻り値は1つであきらめるしかありません。
実は、引数で数値を返すワザもありますが、これは後回しにします。

引数の場合、呼び出すときに必ず指定する必要がありましたが、
戻り値は無視してしまってもかまいません。
実を言えば、printf関数も、何文字表示したかという情報を返してきますが、
はっきり言って、そんなのどうでもいい情報なので、無視してきたのです。

なお、戻り値にも、intの他にdoubleなど、好きな型を使うことが出来ます。
また、戻り値を返さない関数を作ることも可能です。
その場合、引数名の前に、voidを指定します。
ごくごく単純な関数であれば、戻り値が不要なことは意外に多いのです。

目次に戻る