C言語 「仮引数のない関数」と「配列を使った関数」を含むプログラム

プログラミング

 

前回は「関数の意味と宣言の仕方」や「実際に自作関数を使ったプログラム例」などを紹介しました。関数を宣言するときは、メイン関数の前に宣言と定義を同時に行う方法と、宣言だけ先にしておいてメイン関数の後に関数の定義をする方法の2つがあることを紹介しました。

 

前回の自作関数では返却値をもつ関数の例を作りましたが、関数から値を返却してもらう必要がない場合もあるでしょう。今回は「返却値を必要としない関数」、「配列を使った関数」について紹介します。

 

返却値のない関数にはvoid型

 

ざっと関数の定義の仕方を見直しておきます。

上が関数を定義するときの書き方です。関数は大きく分けて「返却値型」「関数名」「仮引数」「関数本体」の4つで構成されています。返却値型は、関数が結果として返す返却値の型を指し、関数名は関数の名前、仮引数は、関数が呼び出されたときに関数が渡される値を格納する変数、関数本体は、関数の機能となるコード、がそれぞれの意味です。

 

では、返却値が必要でない場合はどう書くのでしょう。前回は返却値がある場合、返却値型に何かしらの型を書いてreturn文で値を返し、同時に関数を終了するということを書きました。ここでもしreturn文を書かずに値を返却しなかった場合どうなるでしょう。結果は、コンパイル時にエラーを起こします。返却値型にintやcharなど書き何かしらの値を返すことを明言している以上、返されるはずの値が返されないのはおかしいと判断されるからです。

 

関数において返却値が必要のないときは、返却値型にvoid型を使いますvoid型とは「何もない型」を意味していて、このvoid型を持つ変数は存在しません。つまり、「返却値型がvoid型→存在しない型を返す→しかしそんな型はない→存在しない型は返せない→値を返す必要がない」ということになるのです。

 

これはなにも返却値型に限ることではありません。今までのメイン関数の仮引数の宣言が入る部分にもvoidが入っていました。これは、存在しない型を仮引数に宣言することで、仮引数はないということを明示してます。このようにvoidとは「ない」という意味でプログラムないでも頻繁に使われる型なのです。

上のようにvoid型を当てはめた部分は「なにもない」ということになります。void型を返却値型に指定した場合、return文を書く必要がなくreturn文がなくても関数本体の文が終わると関数は勝手に終了されます

 

例えば上のような関数ではkansu関数は、返却値も仮引数も必要がありません。なので、メイン関数でkansu関数を呼び出す際に( )中にはなにも値が入っていません。このプログラムの結果は「hello」と表示されるだけです。

 

配列を使った関数

 

配列を使った関数を紹介します。配列を使った関数を宣言する場合、通常の関数の宣言とそこまで変わることはありません。ただ1つ仮引数の宣言の部分で配列を宣言するとき、「型 配列名 [ ]」のように宣言するのですが、通常の配列の宣言のように要素数を入れる必要がありません。また、仮引数に配列を渡すときの実引数は、配列名だけを書くだけでかまいません。

 

どういうことかというと、例えばメイン関数で配列を「int a[5];」として宣言したとします。その後配列aを実引数としてmax関数に渡す場合、呼び出しは「max( a );」と書き、max関数の仮引数には「int v[]」と書くだけでいいと言うことです。以下のプログラムがその例です。

配列全体を渡すときは実引数として配列名だけを書き、仮引数には要素数を書かない配列を宣言するということです。上のプログラムではmax関数に渡された配列aの値が配列vに格納され、そのv[0]の値を表示します。実行結果は「1」となります。

 

関数を用いての配列の受け渡しは、通常の変数と違ってポインタという考え方を使わなければいけません。ポインタはここで説明するにはちょっと難しいので、今は簡単に上で書いたような書き方で受け渡しが出来る程度に覚えておいてください。

コメント