腕時計の沼、オーディオの沼、PCの沼。『タクジの沼』

構造体と共用体

構造体

2つ以上の関連するメンバからなるデータ型の集合または、複合のこと。
配列とは違い、同じ型に限定されない関連するデータメンバの集合です。

strcut タグ名{
	型	メンバ1;
	型	メンバ2;
	型	メンバ3;
	...
	型	メンバN;
}変数リスト;

一旦構造体の型を定義すれば、その方の変数をいくつでも作ることができます。

strcut	タグ名	変数リスト;

構造体へのポインタ

構造体にアクセスするにはポインタを利用するのが一般的な方法です。

strcut s_type{
	int   i;
	char  str[800];
}s, *p;				/* 変数sと、s_type型の構造体を差すポインタp */

pはsの戦闘アドレスを指し、pを通じてsにアクセスすることができます。

p->i = 1;

構造体ネスト

構造体は、他の構造体をメンバとすることもできます。

[例]構造体のネストを使用して、2つの部品製造ラインの生産性についての情報を保持、各ラインには10人
#define	NUM_ON_LINE	10

strcut	woker{
	char name[80];
	int  avg_units_per_hour;
	int  avg_errs_per_hour;
};

struc	asm_line{
	int     product_code;
	double  material_cost;
	strcut  worker wkere[NUM_ON_LINE];
}line1, line2;

line1構造体のwkers配列の2つ目の要素であるworker型構造体のavg_units_per_hourメンバに値12を代入するには、次の分を使用します。

line1, wkers[1].avg_units_per_hour = 12;

共用体

2つ以上の変数によって共有されるメモリ上の単一の領域のことを指します。 メモリを共有する変数は、型が異なってしてもかまわないが、一度に1つの変数しか使用することはできません。

union タグ名{
	型	メンバ1;
	型	メンバ2;
	型	メンバ3;
	...
	型	メンバN;
}変数名;