返り値「関数が返答してくれる!」 | 技術者が教える初心者さんのためのC言語

技術者が教える初心者さんのためのC言語

〜最小限の知識でプログラム〜

いつも感謝しています。Nです。


記事

引数「関数に情報を渡そう!」
引数パート2「関数に複数の情報を渡そう」
引数パート3「おおもとの情報は勝手には変えられない&近日メルマガ発行予定のお知らせ」
で、関数に情報を渡すには引数を使うんだよということをお話してきました。


今回は、関数の返り値についてお話しますね。


たとえば、あなたが計算が苦手だったとします。

学校の授業で、先生から「1~100までの和と5051の値どっちが大きい?」と聞かれたとします。


こんなときに、そろばんをやっている友達がいたら助かりますよね(笑)。


友達に「1~100までの和を教えて!」って言えばその友達がパッって暗算して教えてくれる。

そして、その答えと、5051どっちが大きいが比較して、答えればいいですから(笑)


実は、このような仕組みが関数の返り値というのを使うことで出来てしまいます。


使い方次第では非常に便利な機能ですので、是非マスターしてくださいね。


では、具体的にお話します。


上の例

「友達に「1~100までの和を教えて!」って言えばその友達がパッって暗算して教えてくれる」を分析してみると、


この場合の友達・・・和を計算してくれる関数

1~100まで ・・・・情報(つまり、引数)

友達からの返答・・・返り値(返答)


のようになります。


つまり関数の返り値とは、友達関数君?が返答してくれる値と言えます。


まずは先に、

実際に上の例を実現する自作関数のサンプルを記載してみますね。


int  friend( int  start,  int  end  )

{

    int  ii;

    int  sum;


    sum = 0;


    for( ii = start; ii <= end; ii++ )

    {

         sum += ii;

    }


    return(  sum );

}


引数のお話のときに、出てきた関数とよく似ていますね。

では、違うところはどこでしょうか?


そう、return( sum ); の部分ですね。

(関数名は、今回のストーリと関連付けるためfriendにしています)


関数からの返答(返り値)させるには、returnの後の( )の中に返したい値をいれることでOKです。


この例の場合は、合計値を返したいので、sumを入れていますね。


そして、ここでもう一つ大事な点があります。


関数名friendの前に、intという「変数の型」が記載されている点です。


ここの変数の型は、返り値の型と一致させる必要があります

ここでは、返り値sumの変数の型はintですので、intとしています。

もし仮に、sumがdouble型ならば、double friend( int start , int end )のようになります。



では、

次にこの新しい自作関数friendをmain関数から呼んであげることにしましょう。


まずは、サンプルプログラムを書いてみます。


#include <stdio.h>


/* プロトタイプ宣言(変わりますよ~) */

int friend( int first,  int end );


int  main( void )

{

     /* friendからの返り値を受けるための変数 */

     int  answer;

 

     /*  friendからの返り値を受ける方法 */

     answer = friend( 1, 100 );


     /*  先生に対して答えましょう */

     if( answer < 5051 )

     {

          printf("maxValu is 5051¥n"); 

      }

     else if( answer > 5051 )

     {

          printf("maxValu is sum¥n"); 

      }

      else

      {

          printf("Those value is equal¥n");

       }


      /* 友達にありがとうって言いましょう(笑) */

      printf("Thank you!, friend!!¥n");


       return( 0 );

}


/* 自作関数 */

int  friend( int  start,  int  end  )

{

    int  ii;

    int  sum;


    sum = 0;


    for( ii = start; ii <= end; ii++ )

    {

         sum += ii;

    }


    return(  sum );

}


実行結果:

maxValu is 5051

Thank you!, friend!!


自作関数friendをmain関数から呼んであげて、その返り値を受ける方法は、


answer = friend( 1, 100 );


のようになります。


つまり、

main関数の中で呼ぶ自作関数は、返り値を発言していると捉えることができます。


なので、

それを answer = friend( 1, 100 )のように記載すると、自作関数からの返り値がanswerに代入されその値が自作関数の返り値になります。


今回は、関数の返り値に関して述べました。


返り値が必要かどうかを判断するには、


先の例「友達に「1~100までの和を教えて!」って言えばその友達がパッって暗算して教えてくれる。

そして、その答えと、5051どっちが大きいが比較して、答えればいい」


のイメージを掴むと分かりやすいかもしれませんよ。


是非、イメージしながら今日のサンプルプログラムを実際に書いて試して確認してくださいね。