🌞自䜜関数 蚀語倧持捕獲 return y;によりyの栌玍しおいる倀を戻り倀にも぀自䜜関数に぀いお考察しおみたしょう

マックス 「はじめるぜ倧持じゃわはははは」


゜ヌラヌ 「すごいです。近幎たれにみる蚀語倧持捕獲です。」


マックス「このint,int,int,int,int・・・・・の数をみろ ゜ヌラヌ


これで倧持のデヌタヌを


倩囜にいける蚀語入門にフィヌドバックできるぞ」


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


倩囜にいける蚀語入門にフィヌドバックしたら、


野生の王囜 intランドになっちゃいたす。


゜ヌラヌ 「そのずおりです。わはははは、


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


こんなにintが・・・


こんなにintが・・・


今日は このintを぀かっお「戻り倀」を


int型に栌玍する自䜜関数に぀いお芳察しおいきたしょう。」


マックス 「戻り倀か・・・・・えずぎりか・・・」


゜ヌラヌ 「そうです。戻り倀です。



いたたでは


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

👇

#include <stdio.h>


void function(int x){

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

return;

}


int main(void){

function(1);

return 0;

}

👆

function(1);

を実行するこずにより


自䜜関数 function(int x)のint xに


数倀1を代入しおいたした.


この堎合


プログラムの実行結果


EAZY IDECの堎合

1


Visual Studioの堎合

1

が衚瀺されたす


このプログラムの自䜜関数functionの定矩を

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{}がはじたるより前に


(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自䜜関数が甚いられたプログラム


ず


🐀🐀前のタむプのプログラムを


芋比べながら分間芳察したしょう。




🍓🍓おnew自䜜関数newfunctionが甚いられたプログラムはこちらです

👇

#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自䜜関数newfunctionの定矩では


先頭にvoidの代わりにintが぀いおいたすね。


なぜvoidの代わりにintが぀くのかずいうず


数倀を栌玍する型ずしおint,floatなどがありたすね


敎数の型int をこのように


👇

int newfunction (int x){

int y;

y=x+5;

return y;

}

👆

自䜜関数newfunctionの前に蚘述するこずにより


自䜜関数newfunctionが


newfunction(1);


が


実行されたずき


return y;により


自䜜関数newfunction(1)


に戻される戻り倀y


を 自䜜関数newfunction(1) がうけずるこずができるようになりたす。


たるで


倉数宣蚀


int newfunction(1);


が実行されお


int型の倉数であるnewfunction(1)に戻り倀yが代入されおいるような感芚です



voidはデヌタを栌玍しないデヌタの型なので笑


void newfunction (int x){

int y;

y=x+5;

return y;

}


のように


自䜜関数newfunctionの定矩で


自䜜関数newfunctionの型ずしお


voidが蚘述されおいるず


return y;


により戻される戻り倀yを


自䜜関数newfunction(1)に栌玍するこずができたせん



では このreturn y;は


どのような倀を自䜜関数newfunction


に戻り倀ずしおわたしおいるのでしょうか


この🍓🍓のプログラムのおnew自䜜関数では


y=x+5にx=1を代入するこずによっお


yに6が代入されるこずになりたす 


               


return y;によっお



    😊自䜜関数newfunction(1)😊


に


yが戻り倀ずしお返されたす。


yにはが代入されおいるので


newfunction(1)には6が戻り倀ずしお返されたす


そう😊


newfunction (int x)でなくnewfunction (1)


に戻り倀6は返されたす。


数倀デヌタ1がnewfunction (int x)のint xに代入されたずきの


newfunction(1)に


戻り倀6は返されるずいうこずです。


぀たり


あたかも


newfunction(1)=6;


のようなものが実行されるこずになりたす


int xに䞎えられるデヌタにより


戻り倀が倉わるず


自䜜関数が受け取る戻り倀の倀も倉わりたすね


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


newfunction (2)に戻り倀7は返されたす。


぀たり


newfunction (2)=7;


のようなものが実行されるこずになりたす



前のタむプの自䜜関数の定矩では

👇

void function(int x){

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

return;//👈ここに泚目

}


function(1);

を実行したずき


おnew自䜜関数newfunctionのように


return y;ず蚘述しお 数倀y=6を


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


returnのあずに䜕も曞かない


return ;


が蚭定されおいたす


そしお



     🌞自䜜関数の定矩では🌞


🌞戻り倀を栌玍する型を自䜜関数名の先頭に眮くずいうルヌルずなっおいたすが🌞


前のタむプの自䜜関数functionの定矩

👇

void function(int x){

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

return;//👈ここに泚目

}


のように


戻り倀が自䜜関数にもどされないずきは


䜕もデヌタを栌玍しない型 voidを自䜜関数名の先頭に眮くこずになりたす



💖💖おnew自䜜関数の定矩では

👇

int newfunction (int x){

int y;

y=x+5;

return y;

}


敎数の倀を栌玍する戻り倀yが自䜜関数newfunctionにわたされるように


自䜜関数名newfunctionの前に


敎数倀を栌玍する型 int が蚘述しおあったのです。




以䞋では


教逊を深めるため


💖💖おnew関数内の倉数yずnewfunction (1)の関係に぀いお


さらに詳しく考察を加えおみたす。」


solarplexuss「本圓 こういうの奜きですよねえ」


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


゜ヌラヌ「


main関数内で


newfunction(1);


が実行されるず


💖💖おnew自䜜関数の定矩


int newfunction (int x){

int y;

y=x+5;

return y;

}


の

int xに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を栌玍したを戻り倀ずしおnewfunction(1)に代入し


数倀6をnewfunction(1)


に䞎えおいるずいうわけです😊」


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


゜ヌラヌ「


もうちょっず 話させおぇぇぇぇぇ 話させおぇぇぇぇぇええええええぃいい


return y;によっお


戻り倀が


newfunction(1)に返されたすが


yに栌玍された数倀6は


数倀1を匕数に䞎えられた自䜜関数newfunction(1)に代入されたす。


戻り倀を栌玍する自䜜関数newfunction(1)の型が


intに蚭定されおいるので


あたかも次のような呜什文が実行されおいるのず同じなんじゃない

⇩

int newfunction(1)=6;


それで


int newfunction(1)=6;


を よく芳察しおみるず



たるでnewfunction(1)がint型の倉数で


そこに


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


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


゜ヌラヌ「あっ 脱線しおた  忘れおた


ここで぀いに


int a=newfunction(1);

printf("%d",a);


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




🍓🍓new自䜜関数のプログラムを今䞀床ご芧ください


#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


゜ヌラヌ「そう


自䜜関数newfunction(1)が実行されるず


newfunction(1)=


ずなりたしたね


で



int a=newfunction(1);



にご泚目ください


int a=newfunction(1);


は


int a;

a=newfunction(1);


が実行されるこずに等しいのですが


aの倉数宣蚀


int a;


を実行しお䜜補された


倉数aにnewfunction(1)が代入される圢になりたす


newfunction(1)は6の倀をもっおいるので


倉数aは6の倀をも぀こずになりたす


ですので


printf("%d",a);


により


プログラムの実行結果


6

が衚瀺されるずいうわけです」


solarplexuss


「そうか(#^^#)


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


  • Twitterで共有
  • Facebookで共有
  • はおなブックマヌクでブックマヌク

䜜者を応揎しよう

ハヌトをクリックで、簡単に応揎の気持ちを䌝えられたす。ログむンが必芁です

応揎したナヌザヌ

応揎するず応揎コメントも曞けたす

新芏登録で充実の読曞を

マむペヌゞ
読曞の状況から䜜品を自動で分類しお簡単に管理できる
小説の未読話数がひず目でわかり前回の続きから読める
フォロヌしたナヌザヌの掻動を远える
通知
小説の曎新や䜜者の新䜜の情報を受け取れる
閲芧履歎
以前読んだ小説が䞀芧で芋぀けやすい
新芏ナヌザヌ登録無料

アカりントをお持ちの方はログむン

カクペムで可胜な読曞䜓隓をくわしく知る