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

22.6 課題 22

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

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

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

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

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

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

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

     main(){
	struct gakusei g[100];
の部分を以下のように変更し、
    main(){
	struct gakusei *g[100];
それぞれの struct gakusei型のデータは、必要になる度に以下のように して確保します。
	g[i] = (struct gakusei *)malloc(sizeof(struct gakusei));

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

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

メモリ中から必要なメモリを取得するにはメモリ割り当て関数 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