タグ付きの構造体
構造体指定子では structキーワードの後に、宣言する構造体の名前を設定できます。この名前を、構造体のタグと呼びます。タグは、構造体の内容を表すもので、一度宣言された構造体を後で再利用できます。
struct Point { int x, y; } ;
上記の宣言は、int型のメンバ x と y を持つPointという名前の構造体を宣言しています。同時に変数を宣言することもできますが、再利用を前提とした構造体のタグを宣言することが目的であれば、変数は省略しても構いません。タグを指定して、直後の波括弧によるメンバ宣言並び { } が省略されている宣言は、指定されたタグを持つ構造体の宣言として解釈されます。
struct Point pt;
上記の変数ptは、既に宣言されているPoint構造体として解釈されます。何度も利用する構造体の場合、最初に構造体の内容を含むタグを宣言することで、それ以降は構造体の内容を省略して変数を宣言できます。
Sample02
#include <stdio.h>
int main(void)
{
struct Point { int x, y; };
struct Point pt1;
struct Point pt2;
pt1.x = 10;
pt1.y = 20;
pt2.x = 100;
pt2.y = 200;
printf("pt1.x=%d, pt1.y=%d\n", pt1.x, pt1.y);
printf("pt2.x=%d, pt2.y=%d\n", pt2.x, pt2.y);
return 0;
}
実行結果
Sample02の実行結果 |
Sample02は、int型のメンバ x と y を持つ Point構造体を宣言しています。最初のPoint構造体の宣言は、構造体のタグを宣言することが目的なので、変数は宣言していません。その後、宣言されたPointタグを使って構造体の内容を省略してpt1変数とpt2変数を宣言しています。実行結果を見れば、これらの変数が正しくPoint構造体の x メンバと y メンバを保持していることを確認できます。