(30.1) 関数の中には、計算した結果の値がないものがある。
(30.2) いま、大きさ N の int 型配列を使ったプログラムを書いているとしよう。 自分が書きつつあるものが正しいかどうかの参考にするため、 ところどころで、0 以上 N 未満の数 n に対し a[0], a[1], ..., a[n] の値を一行に出力させることを考える。 次のプログラムは a[i] に i の二乗を代入するだけなのであまりに簡単だが、 サンプルとしてあげた。
#include <stdio.h> #define N 20 void print(int n); int a[N]; main() { int i; for (i = 0; i < N; i++) { a[i] = i*i; print(i); /* ←配列の内容を確認するため呼んでいる */ } } /* a[0], a[1], ..., a[n] の値を一行に出力 */ void print(int n) { /* この本体は各自で考えて書いてみよ */ }
(30.3) void print(int n) の void は、返り値がないことを示す。 つまり、この関数はこれが行なう機能に意味があるのであって、 power(2, 3) のように計算した結果の値を使うものではない。 (いままで出てきた関数では、printf() の使い方がそれに似ていた。 実は printf() にも返り値があるのだが、 授業では「出力する」という機能だけを使っていた。)
(30.4) 配列全体を出力するのなら、引数の n は不要となる。 その場合は関数の定義の最初の部分は void printall(void) のようにする。 小カッコの中の void は、引数がないことを示す。 使うときは「printall();」のように使う。 小カッコの中には何も書かない。 この関数を自分で書き、使ってみよ。 すなわち、 main() の側では配列に適当な操作を行ないつつ、 ときどきこの関数を呼び出してみよ。
(30.5) int func(void) のような関数もある。 この関数は「func();」のようにして呼び出すと int 型の値を返す。 いままで出てきた関数の中では int rand(void) がそうだった。