2007 年度「計算機基礎論3B」 2008-01-11

§30 void

(30.1) 関数の中には、計算した結果の値がないものがある。

(30.2) いま、大きさ Nint 型配列を使ったプログラムを書いているとしよう。 自分が書きつつあるものが正しいかどうかの参考にするため、 ところどころで、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) がそうだった。


岩瀬順一