まずは自作関数f(a,b)型の引数表現に慣れましょう 

アレサ「さあ、ソーラーさん 


自作関数の仕組みをくわしくみていきますよ~」


ソーラー「アイアイレディ\(^o^)/」


アレサ 「すこしずつ すこしずつ 


たくさんの変数を引数にもつ自作関数について


考察していきますね ソーラーさん」


ソーラー 「f(a,b,c,d,e)のような自作関数は ほんと


どのような仕組みになってるんだろうね。」


アレサ

「はいっ 


自作関数とは 自分で作製できるオリジナルの関数のことでした。


以下のプログラムでは


自作関数の定義

void function(int x){

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

return;

}

により


自作関数 function(int x)が作製され


int xに数値1が代入されて→


#include <stdio.h>


void function(int x){

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

return;

}


int main(void){

function(1);

return 0;

}


コンパイル結果


となります。


ここで自作関数function(int x)は変数xという1つの引数をもっています。


自作関数のない通常のプログラム


#include <stdio.h>


int main(void) {

int x;

x = 1;

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

return 0;

}

において


int x;


と xの変数宣言がおこなわれなければ


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


はxが定義されておらず


コンパイルエラーがでてしまいます。


ですので


int x;

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


printf("%d\n",x);が機能するうえで

1つのセットになっています。


ということは


自作関数function(int x)の定義を設定する際にも

変数宣言

int x;

と変数xを引数に持つ関数

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

のようなものが

セットで必要になってくるのですの。


そして 自作関数function(int x)の定義の後


変数xに


function(1);


数値1を格納することにより


printf("%d\n",1);が実行され


コンパイル結果は


1と表示されるわけです。


ところで 今の例では 自作関数


function(int x)が1つの引数として変数xをもっていましたが


自作関数が次のように 2つの引数を持つ場合がありますの


function(int x,int y)


それはどのような 場合だと😊 おもわれますか」


ソーラー「 あ~~ そもそも自作関数って


たくさん引数をもつことができるのかな?」


アレサ「はい 数学の関数において


いくらでも 変数をもつ関数を


次のように


数学の関数の例 f(x,y) z(x,y,t) f(a,b,c,d,e)


作製できるように



C言語においても


引数をたくさんもつ自作関数 を作製することができます。


たとえば


つぎのような


2つの関数を

int x;

int y;

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

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

(関数と引数である変数の変数宣言はセットでしたね)


1まとめにした自作関数


Twoprintfを作製してみます


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

int x; int y; と xとyの変数宣言がおこなわれなければ


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

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


は関数として機能しません


ですので

int x;

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


int y;

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

それぞれセットになっています。


ですので


2つの関数をまとめた自作関数の定義には 


これら4つの命令文


int x;

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

int y;

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


の記述が必要となります。


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



ソーラー「2つの引数をもつ自作関数を作製するんだ~


たのしみだなあ」


アレサ「自作関数Twoprintfに


ひとつにまとめられる関数


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

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

内の

変数x

変数y 


この2つの変数x,yには

それぞれ数値が代入されるよう設定する必要があります。


イコール

自作関数Twoprintfには


数値を代入するための2つの引数x,yが必要となってくるわけです。


そのようにして


自作関数の定義は


void Twoprintf (intx,inty){

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

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

return;}

 

となりますが

Twoprintf (intx,inty)はTwoprintf (x,y)とはなりません。


int x; int y; と xとyの変数宣言がおこなわれなければ


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

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


は関数として機能しないので


このように xとyの変数宣言int x int yのないような

void Twoprintf (x,y){

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

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

return;}


自作関数の定義をおこなうことはできないわけです。


(正確にいうなら できないC言語上の仕様ということでしょうか


他のプログラミング言語ではint x int yを記述しなくても


自作関数の引数にx,yを指定できるものもあります。


未来より 追記しました)


では、この自作関数を組み込んだプログラムを構成してみてみます。



#include <stdio.h>


void Twoprintf (int x,int y){

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

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

return;}


int main(void){

Twoprintf(1,2);

return 0;

}


コンパイル結果

1

2


ソーラー「Twoprintf(1,2);か・・・


なんか、かわいーなあ💖」


アレサ「 このTwoprintf(1,2);はTwoprintf(intx,inty);の


int x,int yにそれぞれ数値1,2が代入されたものですの。」


ソーラー 「たくさんの引数をもつ自作関数というのも


簡単にできそうだね。」


🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🍎🍎


ここで


いまのプログラムをすこしだけ変形したプログラムを考察してみましょう。


#include <stdio.h>


void Twoprintf (int x,int y){

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

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

return;}


int main(void){

int a=1;

int b=2;

Twoprintf(a,b);

return 0;

}


コンパイル結果

1

2


ソーラー「おお、でてきてる、でてきてる



 自作関数Twoprintf (int x,int y)とよく似た表現


 f(a,b)型の表現  Twoprintf(a,b);😝がっ


どうやら

int xに変数aが

int yに変数bが代入されているみたいだね。」



このプログラムにおいては


自作関数Twoprintf (int x,int y)


に main関数内で作製された


数値1を格納している変数a

数値2を格納している変数bを


int xにa

int yに b を代入


Twoprintf (a,b) とすることにより


自作関数Twoprintf の


int xに数値1

int yに数値2


を値渡しし


そして格納された


数値1

数値 2


がprintf表示されるという流れ🌊になっています。



ソーラー「f(a,b)型の引数表現とは


この場合で言うと


自作関数Twoprintf (int x,int y)の引数int x,int yに


別に変数宣言されて作成された変数a,bが格納されている


Twoprintf (a,b)


状態をあらわしてるんだ


だから 変数宣言int x int yがみあたらないんだよね」



そ~うなんです。


それでは 次のプログラムはいかがですか?


#include <stdio.h>


void Twoprintf (int x,int y){

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

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

return;}


int main(void){

int x=1;

int y=2;

Twoprintf(x,y);

return 0;

}


コンパイル結果

1

2


ソーラー「このTwoprintf(x,y);


ここがポイントかな?」


このプログラムでは


main関数内でも

int x=1;

int y=2;

x,yの変数宣言、初期化が行われています


が 以前のエピソードでも確認したように


この


main関数内で定義された変数x,yは


自作関数内で変数宣言によってつくられた変数x,yとは


異なる変数として コンピュータには認識されています。


このプログラムでは


自作関数Twoprintf (int x,int y)


に main関数内で作製された


数値1を格納している変数x

数値2を格納している変数yを


int xにx

int yに y を代入


Twoprintf (x,y) とすることにより


自作関数Twoprintf の


int xに数値1

int yに数値2


を値渡しし


そして格納された


数値1

数値 2


がprintf表示されるという流れ🌊になっています。



🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

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

作者を応援しよう!

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

応援したユーザー

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