サンプルプログラム struct.c
(11)構造体
例えば健診のとき、人の名前、年齢、身長、体重、視力、血圧などをまとめて1つのデータとして扱えれば便利ですよね?。
このようなデータをまとめて扱えるようにするのか構造体です。
構造体を使用するにはまず構造体を定義する必要があります。
// 構造体の定義例1 struct tag1 { char name[31]; // 名前(全角15文字まで) int age; // 年齢 double height; // 身長 double weight; // 体重 double visionR; // 視力(右) double visionL; // 視力(左) double bloodPressure; // 血圧 }; // 構造体の定義例2(こっちの方が実用的です) typedef struct tag2 { char name[31]; // 名前(全角15文字まで) int age; // 年齢 double height; // 身長 double weight; // 体重 double visionR; // 視力(右) double visionL; // 視力(左) double bloodPressure; // 血圧 } CHECKUPS; // typedefすることで定義した構造体を新しい型とすることができます。
構造体を定義したらグローバル変数またはローカル変数として宣言します。 宣言の仕方は下記のようになります。
struct tag1 svar1, svar2; // 構造体変数 svar1, svar2 を宣言しています CHECKUPS svar3; // これで構造体変数 svar3 を宣言できます
上記のように宣言した変数svar1,svar2,svar3は下記のように使うことができます。
strcpy( svar1.name, "name" ); // 文字列"name"をsvar1.nameにコピーしています。 svar1.age = 20; svar1.height = 170.0; svar1.weight = 60.0; svar1.visionR = 1.5; svar1.visionL = 1.2; svar1.bloodPressure = 130.0; svar2 = svar1; // 構造体のデータをごっそりとコピー // コピーした svar2 の値を出力 printf( "名前 = %s\n", svar2.name ); printf( "年齢 = %d\n", svar2.age ); printf( "身長 = %3.1f\n", svar2.height ); printf( "体重 = %3.1f\n", svar2.weight ); printf( "視力R= %3.1f\n", svar2.visionR ); printf( "視力L= %3.1f\n", svar2.visionL ); printf( "血圧 = %3.1f\n", svar2.bloodPressure ); // 構造体tag1のデータサイズ printf( "\ntag1データサイズ = %dバイト\n", sizeof(struct tag1) ); // 下のコードを有効にするとエラーになります。 // 理由は同じメンバを定義している構造体でも別々に定義しているため、 // 別物の構造体として認識されるためです! // svar3 = svar2; // これはエラーになります!
ここでtypedefについて少しご説明します。
typedefは、
typedef (定義されている型)(新しい型) // 例 typedef int WORD // WORDという新しい型名でint型変数を定義できるようになります typedef float REAL // REALという新しい型名でfloat型変数を定義できるようになります WORD wd; // 変数wdはint型として宣言されたことになります REAL rl; // 変数rlはfloat型として 〃
という感じで使えます。
で、なぜこのような事をするのかと言いますと、後々「やっぱりint型ではなくshort型にしたいなぁ」とか、
「float型ではなくdouble型にしたいなぁ」とかいうことが多々発生するかもしれません。
そんなときに違う型名で定義しておきますと、例えば上のtypedefしているところのWORDのintの部分をshortにしたりREALのfloatの部分をdoubleに変更するだけでその型名で宣言した変数すべてを変更することが可能になります。
また、別の型名にしておいた方がプログラムも読み易くなったりします。
そんなわけでtypedefをぜひ活用してくださいね。
sizeofについても少しご説明します。
sizeofは、変数や型のメモリサイズを返す演算子です。
使い方は、
sizeof( 変数名 ); sizeof( 型 ); // 例 int size1, size2, size3; size1 = sizeof( int ); size2 = sizeof( double ); size3 = sizeof( size1 ); printf( "size1 = %d, size2 = %d, size3 = %d\n", size1, size2, size3 );
のような感じで使います。