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

6. 課題 20

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

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

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

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

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

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

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

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

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

メモリ中から必要なメモリを取得するにはメモリ割り当て関数 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 平成14年11月26日