MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚える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を指定します。
ごくごく単純な関数であれば、戻り値が不要なことは意外に多いのです。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く