まずは自作関数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;
}
コンパイル結果
1
となります。
ここで自作関数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表示されるという流れ🌊になっています。
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます