🌞自作関数3 C言語大漁捕獲 return y;によりyの格納している値を戻り値にもつ自作関数について考察してみましょう

マックス 「はじめるぜ~~~大漁じゃ~~~わはははは」


ソーラー 「すごいです。近年まれにみるC言語大漁捕獲です。」


マックス「このint,int,int,int,int・・・・・の数をみろ ソーラー


これで大漁のデーターを


天国にいけるC言語入門にフィードバックできるぞ」


(そんなにint,int,int・・・・・・を


天国にいけるC言語入門にフィードバックしたら、


野生の王国 intランドになっちゃいます。)


ソーラー 「そのとおりです。わはははは、


int x,int y、int z, int γ、int α・・・・・


こんなにintが・・・


こんなにintが・・・


今日は このintをつかって「戻り値」を


int型に格納する自作関数について観察していきましょう。」


マックス 「戻り値か・・・・・えとぴりか・・・」


ソーラー 「そうです。戻り値です。



いままでは自作関数 function(int x)のint xに


次のようにプログラムを記述し


#include <stdio.h>


void function(int x){

printf("%d\n",x);

return;

}


int main(void){

function(1);

return 0;

}


数値1を代入していました.


この場合


コンパイル結果


EAZY IDECの場合

1


Visual Studioの場合

1

になります。


このプログラムの自作関数の定義を

void function(int x){

printf("%d\n",x);

return;

}

から

void function(int x){

printf("%d\n",2*x);

return;

}


に変更したプログラム

👇

#include <stdio.h>


void function(int x){

printf("%d\n",2*x);

return;

}


int main(void){

function(1);

return 0;

}


をコンパイルすると


コンパイル結果


EAZY IDECの場合

2


Visual Studioの場合

2

になります。


つまり

function(1);


が実行されるとき


int x=1;

printf("%d\n",2*x);


が実行されているわけです。


function関数の定義のなかの2xを x+5にかえた


プログラムのコンパイル結果は次のようになります


🐤🐤

#include <stdio.h>


void function(int x){

printf("%d\n",x+5);

return;

}


int main(void){

function(1);

return 0;

}


コンパイル結果


EAZY IDECの場合

6


Visual Studioの場合

6



になります。


この場合は


int x=1;

printf("%d\n",x+5);


が実行されているわけです。


function(1);


は


数学におけるy=f(1)のようなものではなく


printf("%d\n",6);


という


コンピュータに命令をあたえる命令文となっていますね。

_______________________



ソーラー 「ここで新しいタイプの


おnew自作関数


int newfunction (int x){

int y;

y=x+5;

return y;}


を定義します。


前の自作関数


void function(int x){

printf("%d\n",x+5);

return;

}



とは


ちょっと違った自作関数になっていますね


どこがちがうのでしょうか?


今までの自作関数のように


newfunction関数の定義を


int main{}がはじまるより


前に持ってくるのは同じとなります。


🍓🍓

#include <stdio.h>


int newfunction (int x){

int y;

y=x+5;

return y;}


int main(void){

int a=newfunction (1);

printf("%d",a);

return 0;

}


このときの自作関数newfunction (int x)の定義は


前にでてきた自作関数の定義とちがい



        void newfunction (int x)が


      int newfunction (int x)となっています。



さらに


            return;から



          return y;に変化していますね。



さらに


   🍓自作関数newfunction (int x)が🍓


main関数内で


          int a=newfunction (1);

           printf("%d",a);


と記述されています。


これはどのような仕組みとなっているのでしょうか?



以下の

🍓🍓おnew自作関数が用いられたプログラムと


🐤🐤前のタイプのプログラムを


見比べながら5分間観察しましょう。




🍓🍓おnew自作関数が用いられたプログラム

#include <stdio.h>


int newfunction (int x){

int y;

y=x+5;

return y;}


int main(void){

int a=newfunction (1);

printf("%d",a);

return 0;

}

コンパイル結果

6


🐤🐤前のタイプのプログラム

#include <stdio.h>


void function(int x){

printf("%d\n",x+5);

return;

}


int main(void){

function(1);

return 0;

}

コンパイル結果

6




どうですか?






今の🍓🍓のプログラム内のおnew自作関数の定義では


先頭にvoidの代わりにintがついていますね。


なぜvoidの代わりにintがつくのかというと


数値を格納する型としてint,floatなどがありますね


整数の型int をこのように


👇

int newfunction (int x){

int y;

y=x+5;

return y;}


自作関数の前に記述することにより


return y;により


自作関数newfunction (int x)


に戻される


整数の値を持つ「戻り値」


を 自作関数newfunction (int x)がうけとることができるようになります。


voidは数値を格納しない数値の型なので(笑)


voidのままでは


整数の値を持つ「戻り値」を格納することができず


整数の値を持つ「戻り値」


を 自作関数newfunction (int x)はうけとることができません。



では このreturn y;は


どのような値を自作関数newfunction (int x)


に戻り値としてわたしているのでしょうか?


この🍓🍓のプログラムのおnew自作関数を例にとると


y=x+5にx=1を代入することによって


得られた 


                 y=6が 


return y;によって



   自作関数newfunction (1)


に戻り値として返されます。


つまりnewfunction (int x)でなくnewfunction (1)


に戻り値6は返されます。


数値データ1がnewfunction (int x)のint xに代入されたときの


newfunction (1)に


戻り値6は返されるということです。


つまり


newfunction (1)=6となるわけです。



与えられるデータにより


戻り値はかわりますが


戻り値をうけとる自作関数の状態もかわります。


数値データ2がnewfunction (int x)のint xにあたえられるならば


newfunction (2)に戻り値7は返されます。


つまり


newfunction (2)=7となるわけです。



前のタイプの自作関数の定義では

👇

void function(int x){

printf("%d\n",x+5);

return;

}


おnew自作関数のように


return y;と記述して 数値y=6を


function (1)に戻す必要がなかったので


returnのあとに何も書かない


return ;


となっています。


そして



     🌞自作関数の定義では🌞


🌞戻り値を格納する型を自作関数の先頭に置くというルールにより🌞



戻り値が自作関数にもどされないときは


何もデータを格納しない型 voidが記述してあったわけです。



おnew自作関数の定義では

int newfunction (int x){

int y;

y=x+5;

return y;}


整数の値を持つ戻り値yが自作関数にわたされるため


整数値を格納する型 int が記述してあったのです。




以下では


そんなことするんかい  という感じですが


教養を深めるため


お new関数内の変数yとnewfunction (1)の関係について


さらに詳しく考察を加えてみます。」


solarplexuss「本当 こういうの好きですよねえ」


。。。。。。。。。。。。。。。。。。。。。。。。。。


ソーラー「

お new自作関数の定義


int newfunction (int x){

int y;

y=x+5;

return y;}


の

int xに1を代入


つまりnewfunction (1)とし


さらに

そのx=1を


y=x+5に代入してy=6としただけでは


コンピューターはnewfunction (1)=6と認識してないんじゃないかな?」



solarplexuss 「???なんでそう思うんです???」



ソーラー

「 だって 


y=x+5にx=1を代入してy=6としただけでは




y=6とnewfunction (1)自体は




 なんの関係もないからね。



だから



             🐥return y;をもちいて🐤



y=6とnewfunction (1)を関係づけて


newfunction (1)の戻り値を6にしていると


おっもうんだな~~~



そのような方法を用いて 


数値6を格納したyをnewfunction (1)に代入し


数値6をnewfunction (1)


に与えているというわけ😊


マックス「よし、終了だな よかったなソーラー」


ソーラー「


もうちょっと 話させてぇぇぇぇぇ 話させてぇぇぇぇぇええええええぃいい


return y;によって


戻り値である数値6は


数値1を引数に与えられた自作関数newfunction(1)に代入されます。


戻り値を格納する型がintに設定されているので


それは次のような状態になるんじゃない?

⇩

int newfunction (1)=6;


それで


int newfunction (1)=6;


を よ~く観察してみると



まるでnewfunction (1)がint型の変数で


そこに


数値6が代入されたかのようにみえますね。」


マックス「そういわれれば なんだか そんな感じがする~~😊」


ソーラー「あっ 脱線してた  忘れてた


ここでついに


int a=newfunction (1);

printf("%d",a);


を説明する時が来ました。


そうして


newfunction (1)=6を→」


🍓🍓のプログラムのように


#include <stdio.h>


int newfunction (int x){

int y;

y=x+5;

return y;}


int main(void){

int a=newfunction (1);

printf("%d\n",a);

return 0;

}

コンパイル結果


EAZY IDECの場合

6


Visual Studioの場合

6


ソーラー「→


int a=newfunction (1);


つまり


int a;

a=newfunction (1);


にひとしいのですが


aの変数宣言


int a;


を実行して作製された


変数aにnewfunction (1)を代入することにより


変数 aに6を与え


printf("%d",a);


により


コンパイル結果は6となるわけです。」


solarplexuss

「よくここまで 気付いたね😊」


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます