BohYoh.comトップページへ  秘伝C言語問答 ポインタ編

第0章 テスト


 この章では、ポインタに関する簡単なテストをします。あなたはいくつ答えられますか。
 ポインタについてよくわかっていない人には、全然わからないかもしれません。ある程度わかっているつもりの人は、自信をなくすかもしれません。
 しかし、落ち込むことはありません。第1章から第9章までをすべて読み終わったき、あなたはこれらのテストにすぐ答えられるようになっているでしょうから。

 本書を本屋で立ち読みされている方へ……
1問でもわからない問題があったら購入をお勧めします(?)

テスト1

 次の関数

    void f(int a[10])
    {
        /* … */
        a[2] = 0;
        /* … */
    }
において、aは配列ではないということ、a[10]の10には意味がないことを説明せよ。
 さらに、C言語では関数の引数として配列そのものの授受はできないこと、配列の添え字が0からしか始まらない(ほかの言語のように、1から始まるとか、下限が指定できるとかではない)理由を説明せよ。

テスト2

 次のプログラム

    int main(void)
    {
        int a[10];

        a[0] = 1[a] = *(a+2) = *(3+a) = 0;
        4[a] = "ABC"[0];
        a[5] = 1["DEF"+1];
        return(0);
    }
の各文の意味を説明せよ。

テスト3

 C言語には1元配列しか存在しないことを

        int a[10][20];
を用いて解説せよ。

テスト4

 次のプログラムにおいて、

    void f(int a[][10])
    {
        /* … */
        a[2][3] = 0;
        /* … */
    }

    int main(void)
    {
        int x[5][10];

        f(x);
        /* … */
        return(0);
    }
f関数のパラメータaの型は何か。
 main関数での関数呼び出しf(x)のxとは何か。&xのことか、それとも&x[0]のことか、それとも&x[0][0]のことか。

テスト5

 動的なメモリ確保のメカニズムを説明せよ。さらに、下の図のように、行によっては列の大きさの異なる配列となるオブジェクトを動的に確保するプログラムを書け。各要素はa[i][j]のようにアクセスできるようにすること。

      01234567
     0□□□□□□□□
     1□□□□
     2□□□□□□□□□□
     3□□

テスト6

 標準入出力のファイル処理で必ず使用する

        FILE *p;
の宣言の意味を説明せよ。また、fopen関数は具体的にどのようなことを行っているのか説明せよ。

テスト7

 次のプログラムはファイルのオープンをする部分をopen_filesとして実現したプログラムであるが、正しく動作しない。バグを指摘せよ。

    #include <stdio.h>

    int open_files(FILE *fpi, FILE *fpo)
    {
        if ((fpi = fopen("入力DATA"), "r") == NULL) return(1);
        if ((fpo = fopen("出力DATA"), "w") == NULL) return(1);
        return(0);
    }

著書のページ 本文 ダウンロード Home