struct タグ名 {
	  型 メンバー1名;
	  型 メンバー2名;
	  型 メンバー3名;
	  ・
	  ・
	  ・
	  型 メンバーN名;
	} 変数リスト;
予約語(キーワード)STRUCTは、構造体を定義するとコンパイラーに伝える役目があ
る。タグ名と言うのは、新たに定義した構造体の名前である。型を定義するのであるから、
その型の名前が必要なのである。型は、メンバーの型を示す。これは、C言語で使うこと
ができる通常の型である。たとえば、int, double, char等で、構造体も
メンバーの型として、使える。メンバー名は、構造体を構成する変数の名前で、そのデー
タにアクセスするために必要である。変数リストは、ここで定義された構造体を使う場合
の変数名である。
タグ名と変数リストのどちらか一方は省略可能である。タグ名を省略すると構造体の型名 が無くなるので、その内容がわかりにくくなり、通常は省略しない。一方、変数リストが 省略されることは、しばしば生じる。
それでは、例として学生の名前と成績、身長、体重を示した構造体を定義してみる。
	struct gakusei{
	  char name[80];
	  int mathematics;
	  int english;
	  int japanese;
	  int electrical_eng;
	  int info_eng;
	  double height;
	  double weight;
	} sato, tanaka, yamamoto;
これで、gakusei型の構造体変数のsatoとtanaka、yamamotoが使え
るようになる。さらに、watanabeという変数を追加したい場合は、struct gakusei watanabe;とすればよい。
変数リストを省略すると、
	struct gakusei{
	  char name[80];
	  int mathematics;
	  int english;
	  int japanese;
	  int electrical_eng;
	  int info_eng;
	  double height;
	  double weight;
	};
となる。こうすると、このgakusei型の構造体変数を使うためには、struct gakusei sato, tanaka, yamamoto;のようにプログラム中で書く必要がある。
一方、タグ名を省略すると、
	struct {
	  char name[80];
	  int mathematics;
	  int english;
	  int japanese;
	  int electrical_eng;
	  int info_eng;
	  double height;
	  double weight;
	} sato, tanaka, yamamoto;;
となる。この場合は、新たにこの型の構造体変数を追加することができないので、不便な
場合がある。変数の数があらかじめ分かっている場合に使われる。
	struct gakusei{
	  char name[80];
	  int mathematics;
	  int english;
	  int japanese;
	  int electrical_eng;
	  int info_eng;
	  double height;
	  double weight;
	} M2[50], E2[50], C2[50], B2[50];
とする事ができる。
変数リストを省略して、
	struct gakusei{
	  char name[80];
	  int mathematics;
	  int english;
	  int japanese;
	  int electrical_eng;
	  int info_eng;
	  double height;
	  double weight;
	};
と構造体を定義して、プログラム中で、struct gakusei M2[50], E2[50], C2[50], B2[50];と書き、変数を使うこともできる。
	struct seiseki{
	  int mathematics;
	  int english;
	  int japanese;
	  int electrical_eng;
	  int info_eng;
	};
	struct gakusei{
	  char name[80];
	  struct seiseki test;
	  double height;
	  double weight;
	};
このように入れ子にすることを、構造体のネストと言う。ここでは2段のネストであるが、
3段でも4段でも可能である。
構造体変数.メンバー /* 通常 */ 構造体変数.メンバー.メンバー /* メンバーが構造体 */ 構造体変数.メンバー.メンバー.メンバー /* メンバーのメンバーも構造体*/ 構造体変数[配列の添え字].メンバー /* 構造体が配列*/ 構造体変数.メンバー[配列の添え字] /* メンバーが配列*/ 構造体変数[配列の添え字].メンバー[配列の添え字] /*構造体もメンバーも配列*/ようするに、構造体といえども、ドット演算子を使う以外は通常の変数とほとんど同じで ある。それでは、実際のプログラム例で、それを見てみよう。
	#include <stdio.h>
	#include <string.h>
	struct seiseki{
	  int mathematics;
	  int english;
	};
	struct gakusei{
	  char name[80];
	  struct seiseki test;
	  double height;
	};
	int main(){
	  struct gakusei e2[10];
	  strcpy(e2[0].name,"yamamoto");
	  e2[0].test.mathematics = 95;
	  e2[0].test.english = 65;
	  e2[0].height = 174.8;
	  printf("%s\n", e2[0].name);
	  printf("  Mathematics : %d\n", e2[0].test.mathematics);
	  printf("  English     : %d\n", e2[0].test.english);
	  printf("  Height      : %f [cm]\n", e2[0].height);
	  return 0;
	}
構造体は通常の変数のように取り扱うことができるので、scanfをつかって、キーボー ドからデータを読み込む場合は、次のようにする。先ほどのプログラムで、キーボードか ら入力された値をメンバーのmathematicsに格納するためには次のようにする。
	scanf("%d",&e2[0].test.mathematics);
 
通常の変数同様、格納する変数(ここではメンバー)の頭に&をつけるだけである。
	
	struct seisu{
	  int i;
	  int j;
	};
	struct seisu k,l;
	int i,j;
	
	struct seisu{
	  int i;
	  int j;
	};
	struct seisu k={1,2};
	struct seisu l[2]={{3,4},{5,6}};
		
	struct seisu{
	  int i;
	  int j;
	};
	struct seisu k, l={1,2};
	k=l;