2 ユーザー定義型

2.1 構造体型の定義と宣言

学生を表す構造体gakuseiの定義2は,次のように書くことができる.これで,学生の 名前と数学,英語,情報処理の成績を入れる型を作ったことになる.
	struct gakusei{
	  char name[80];
	  int mathematics;
	  int english;
	  int info_eng;
	};

これは,gakuseiという構造体のテンプレート(template:鋳型)を作成しただけで,メモリー の確保は行っていない.

実際に,メモリーを確保するためには,次のように書く.gakusei型構造体の変数の宣言で ある.

	struct gakusei shimada, yamamoto, E2[45];

これで,先ほど定義した構造体を使うためのメモリーを確保したことになる.その領域に には名前--変数名のこと--が付けられており,それぞれshimadayamamoto, そして配列型はE2[0], E2[1],$ \cdots$,E2[44]となっている.

賢明な諸君は,あたかもstruct gakuseiが型のように振る舞っていることが分かるだ ろう.すなわち,intのようにstruct gakuseiが型名で,それに続く shimadayamamotoが変数名,E2が配列名である.

2.2 構造体とユーザー定義型

それにしても,構造体型名struct gakuseiは長すぎる.そして分かりにくい.通常 は構造体型定義--テンプレート作成--のとき,次のようにユーザー定義型を使う.
	typedef struct{
	  char name[80];
	  int mathematics;
	  int english;
	  int info_eng;
	} student;

このようにすると,student型構造体の変数宣言は,次のようにできる.
	student shimada, yamamoto, E2[45];

これで,student型の変数shimadayamamoto,配列E2[45]を使うこ とができる.typedefを使うことで,変数宣言が分かり易くなることが理解できるで あろう.構造体を使うときには,このようにユーザー定義型typedefとあわせて使い プログラムを分かり易くするテクニックは,常套手段である.構造体を使うときには, typedefといっしょに使え!!! プログラム例をリスト1に示す.
   1 #include <stdio.h>
   2 #include <string.h>
   3 
   4 int main(void)
   5 {
   6   typedef struct{
   7     char name[80];
   8     int mathematics;
   9     int english;
  10     int info_eng;
  11   } student;
  12 
  13   student shimada, yamamoto, E2[45];
  14   int av;
  15 
  16   strcpy(shimada.name,"shimada masaharu");
  17   shimada.mathematics = 92;
  18   shimada.english = 88;
  19   shimada.info_eng = 45;
  20 
  21   av=(shimada.mathematics + shimada.english + shimada.info_eng)/3;
  22 
  23   printf("%s no heikin = %d\n", shimada.name, av);
  24 
  25   
  26   return 0;
  27 }


\fbox{実行結果}
shimada masaharu no heikin = 75

typedefは構造体のためにあるわけではない.型に別名を付けるためにある.例えば, int型にhogehogeと言う型名を付けることもできる.

	typedef int seisu;

このようにすると,intのかわりにseisuという型名も使うことができる.変数 の宣言を次のようにするのである.
	seisu i, j;

上手に使えば,分かり易いプログラムを書くことができる.


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年4月17日


no counter