next up previous contents
Next: 22. データ構造 Up: 21. ポインタII Previous: 5. 文字列の操作

6. 課題 21

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

課題 21.1
メモリの割り当てI

前のページの最後の例を入力し、動かして見よ。

課題 21.2
メモリの割り当て II

21.1 の課題を改良し、ユーザーの入力行が 10 行までは記憶できるようにし、 最後にそれらを出力するようにせよ。但し、ポインタ配列を用いる。

課題 21.3
メモリの割り当て III

課題 19.4 を改良し、配列で学生のデータを確保している部分を メモリ割り当てで行うようにせよ。但し、個々のデータへのポインタは 前の問題と同じくポインタ配列を使うこととする。 すなわち、


	struct gakusei g[100];
の部分を以下のように変更し、

	struct gakusei *g[100];
それぞれの struct gakusei型のデータは、必要になる度に以下のように して確保します。

	g[i] = (struct gakusei *)malloc(sizeof(struct gakusei));

作成したプログラムをメイルで creport まで送りなさい。題は、kadai21 とする事。

前回の復習
メモリ割り当て

メモリ中から必要なメモリを取得するにはメモリ割り当て関数 malloc() を用いる。

    void * malloc( int );
引数には必要なメモリ量をbyte単位で指定する。また、 正確には引数には符号無整数を用いる。 返り値は割り当てられたメモリへのアドレスが返る。

malloc()で確保したメモリの開放には free() を用いる。


    void free( void * );
引数に開放したいメモリへのアドレスを指定する。

キャスト

明示的な型の変換をキャストと呼び、単項演算子として定義されている。

    char *p;
    p = (char *)malloc(10);

文字列操作

文字列の長さを取得する関数として strlen()がある。

    int strlen( char * );
但し、文字列の終わりの \0 は数えられない。

文字列のコピーのために strcpy()がある。


    char *strlen( char *dest, char *src );

型、オブジェクトの大きさ

型や割り当てられたオブジェクトの実際の大きさを計るために sizeof演算子が用意されている。演算順序などの問題が発生しない ように通常は () で括るようにする。

    malloc( sizeof(int) * 10 );



Noriyo Kanayama