next up previous contents
Next: 18. 構造体 I Up: 17. 配列 II Previous: 3. ポインタを配列として使う

4. 課題 17

cd c を実行した後で( ~/c に移動した後で )、以下の課題を やってみよ。

課題 17.1
アドレスを見る

例 2 を実行して、array の値と &array[0] の値が同じ であることを確認してみよ。

課題 17.2
配列とポインタの相似

例 5 を実行してみて、同じ文字列 "array" が出力される事を確認せよ。

課題 17.3
ポインタ配列

文字列へのポインタ配列を利用し、「げっつ、すげぇー」、「めちゃ、すげぇー」、 「なまら、すげぇー」がランダムに 20 行表示されるプログラムを作成せよ。

参考 char *pastr[3] を用意し、それらに上記の文字列のアドレスを 代入し、乱数を使って、pastr[乱数] が表示されるようにする。

課題 17.4
ポインタと配列 II

以下のようにポインタ配列に人の名前が入っている。この中から、文字 'o' を含む人の名前だけを表示するプログラムを作成せよ。但し、プログラムは、 人の名前が変わってもきちんと動作するように一般的に作成せよ。 更に、一人の人の名前に 'o' が複数含まれている場合でも、人名は 一度だけ表示されること。 作成したプログラムを、creport までメイルで送ること。題名は、kadai17 とする。


       char *name[10];
       name[0]="maruyama";  name[1]="kanayama";
       name[2]="ueda";      name[3]="sakamoto";
       name[4]="momma";     name[5]="fujiki";
       name[6]="himemiya";  name[7]="saga";
       name[8]="seino";    name[9]="kagami";

ヒント

文字型のポインタを用意し、p=name[i] としてから、 while(*p!='\0'){... p++;} を使う。
前回の復習


ポインタ配列
ポインタ配列の宣言

        型  * 配列名[大きさ];
上のように宣言して得られた配列はポインタ配列といい、その要素は 型で指定したデータへのポインタとなる。

配列の名前


        int a[10];
のように宣言されたとき、配列名 aa[0] のアドレス となっているが、ポインタのように a の保持しているこの a[0] のアドレス値を変更する事は出来ない。

ポインタと配列

前の点とは逆に、既に宣言されているポインタ変数を配列のように扱うことは、 自由に行って良い。


        char *s = "My name is";
        int i;
        for(i=0; s[i]!='\0'; i++){
             putchar(s[i]);
        }



Noriyo Kanayama