プログラミング演習II 2003年12月10日(第7回) 木村巌 今日やること 構造体、構造体のポインタ、typedef 復習 前回は、正負の整数の加減算を実装した 構造体(structure) 教科書11章 異なる型を一つに集約する 配列は、同じ型の値のみ保持できるのだっ た 構造体の宣言 struct tag名 { 型名 メンバ1; 型名 メンバ2; ……. }; 構造体の例 struct mpi { int dim; long *digits; }; struct mpi a; 構造体のメンバへのアクセス struct mpi a; /* の時は */ a.dim; a.digits; によって、構造体aの各メンバーにアクセスで きる a.dim = 4; a.digits = {0, 1, 2, 3}; /* aの各メンバーを設定 */ 構造体へのポインタ 任意の型Tに対して、Tへのポインタ型がある のだった 構造体についても、構造体へのポインタが存 在する.たとえば、 struct mpi { long dim; long *digits; } *a; /* aはmpiというタグ名の構造体へのポインタ*/ 構造体の動的な生成 構造体をプログラムに静的に書き込んで おくのではなく、プログラムの実行中に生 成することができる malloc()で必要なサイズのメモリを確保し て、目的とする構造体のポインタへキャス トする. 構造体の動的な生成(例) mpiへのポインタaは、前のスライドのよう に宣言されているとする. a = (struct mpi*) malloc (sizeof (struct mpi))); /* 構造体mpiが収まるサイズのメ モリを確保 */ (malloc()のエラーチェックは省いている) 構造体のメンバの設定などについては、プ ログラム例mpistruct.cも参照の事 型宣言、構造体へのポインタ 教科書11.2, 11.3 プログラム例mpistruct.c 型の定義(typedef) C言語の型システムに、新たに型を追加す ることができる typedefの使い方: typedef 既存の型 新しい型; 例 typedef long *long_ptr; longへのポインタを、long_ptrという新たな 型として追加 構造体のポインタを新たな型とする 上のように定義した構造体mpiを指すポイ ンタを、新たな型として定義する: typedef struct mpi *mpi_t; これで、long, doubleのような組込型同様 に、mpi_tも使うことができる. (ただし、mpi_t型の変数は、使う前にメモ リを確保し、各メンバーを初期化する必要 がある.関数mpi_init()参照) レポート課題 前回3分割した、 main.c (main()関数のみを含む) mpilib.h (プロトタイプ宣言やdefineを含む) mpilib.c (実際の関数定義などを含む) を、従来のlong *によるmpiではなく、今日 説明したmpi_tに変更すること コンパイルして、実行した様子も示せ レポート課題提出要領 2003年12月16日(火)一杯に、木村まで メールで送ること.アドレスは [email protected] 添付ファイルではなく、できるだけメール本 文にレポート本文を記載してください. 文献や友人のレポートを参考にした場合 は、それを明記のこと.
© Copyright 2024 ExpyDoc