関数から数値を返す
戻り値を返す関数
前節では、関数に数値を渡す方法を解説しましたが、
今回は、その逆に関数から数値を返す方法を解説します。
実は、sum関数は、すでに数値を返すように作られています。
とりあえず、前節のsum関数を眺めてみてください。
注目ポイントは2か所です。
1つは、関数名の前についている、intという文字列です。
これは、main関数でそうなっていたのを真似しただけなのですが、
実は、これは、関数から返る数値の型を示しています。
もうひとつのポイントは、return文です。
今まで、とくに何も考えずに関数の最後には必ずつけてきましたが、
実は、このreturn文には、数値を返すという機能があります。
つまり、このsum関数は、int型の数値 0 を返すことになっていたのです。
このような、関数から返ってくる数値を、戻り値(関数値)と呼ぶことがあります。
関数から返される数値。
計算結果か、あるいはエラーの有無を示す数値であることが多い。
呼び出し元で戻り値を知りたい場合には、変数に代入する必要があります。
sum関数の戻り値を、変数valueに代入するには、次のようにします。
この戻り値を使えば、計算結果を表示するだけではなく、
呼び出し元に数値として教えることができます。
呼び出し元では、それを表示したり計算に使ったりできます。
次のプログラムは、計算結果を返すようにsum関数を改造した例です。
このプログラムの実行結果は次の通りになります。
先ほどと結果は変わりませんが、今回のsum関数は計算結果を返すだけであり、
結果の表示はmain関数でprintf関数を使って行っています。
必要であれば、main関数で戻り値を別の計算に使うことも可能です。
今回は、その逆に関数から数値を返す方法を解説します。
実は、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を指定します。
ごくごく単純な関数であれば、戻り値が不要なことは意外に多いのです。
では、当然、戻り値でも・・・、と言いたいのですが、そうはいきません。
なんと、戻り値は1つだけしか返すことが出来ないのです。
そうなっている以上、戻り値は1つであきらめるしかありません。
実は、引数で数値を返すワザもありますが、これは後回しにします。
引数の場合、呼び出すときに必ず指定する必要がありましたが、
戻り値は無視してしまってもかまいません。
実を言えば、printf関数も、何文字表示したかという情報を返してきますが、
はっきり言って、そんなのどうでもいい情報なので、無視してきたのです。
なお、戻り値にも、intの他にdoubleなど、好きな型を使うことができます。
また、戻り値を返さない関数を作ることも可能です。
その場合、関数名の前に、voidを指定します。
ごくごく単純な関数であれば、戻り値が不要なことは意外に多いのです。
本サイトについて
苦しんで覚えるC言語(苦C)はC言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。




