構造体を記述するにはstructを宣言
造体を使用すると関連する変数をまとめて一つの変数名を用いて処理することが可能になります。
サンプルソース
#include <stdio.h> #include <string.h>struct kouzou{ char name[50]; int haiki; int nenpi; };void aa(struct kouzou kzu);int main(void) { struct kouzou dat, dattwo;strcpy(dat.name,”カローラ”); dat.haiki=1300; dat.nenpi=20;dattwo=dat;aa(dattwo);return 0; } void aa(struct kouzou kzu) { printf(“車種名%s\n”,kzu.name); printf(“排気量%d cc\n”,kzu.haiki); printf(“燃費リッター%d km\n”,kzu.nenpi); } |
ソースコード解説
構造体を記述するには、【 struct 】を宣言します。
【 struct 】【 任意の構造体名 】【 { 】【 使用する変数宣言及び変数名 】【 }; 】を言う記述になります。
構造体を記述するには、それぞれの関数の一番前に宣言しなければならないと言うルールがあります。
下記の場合、関数プロトタイプ【 void aa(struct kouzou kzu); 】を構造体より前に宣言してしまうと、構造体宣言が無効となりエラーとなってしまいます。
メイン関数の中で、構造体の中の変数を使用するには【 struct 構造体名 】の変数名を決めて使います。
例:【 strutc 構造体名 a; 】これで構造体の中の変数を使用することが可能になります。
下記の場合は【 dat 】(値を代入)と【 dattwo 】(関数にて処理する作業用)を宣言しそれぞれ処理しております。
構造体の中の変数に値を代入するには例:【 dat.haiki = 任意の数値 】下図を参照してみてください。
※【 strcpy(dat.name,”任意の名前”); 】に付きましては【 strcpy 】関数を用いて【 dat.name 】に”任意の名前”を代入させる作業に用いています。
実行結果
構造体のメンバ指定やメンバアクセス演算子の説明
構造体の変数を参照する際に使うメンバアクセス演算子に付いて説明させていただきたいと思います。
構造体の宣言
※以下サンプルソースは「#include <stdio.h>宣言は省略しております。」
struct 任意の構造体名{ 任意の変数宣言 任意の変数名 }; |
上記の任意の変数&変数名の集まりをメンバと言います。
構造体宣言 例
struct zzz{ char nm[50]; int nedan; int nebiki; }; |
上記構造体に用意した任意の変数(メンバ)を指定する場合↓
struct zzz dat;
strcpy(dat.car,”カローラ”); |
メンバを指定する際に、構造体変数名【 dat 】とメンバ指定変数名との間に【 . 】(ドット)が付いていることに気が付くと思います。これをドット演算子と言います。
またポインタを用いて指定する場合は【 -> 】アロー演算子を用います。
今から上記のサンプルをポインタと【 -> 】アロー演算子を用いたサンプルを見てみたいと思います。
サンプルソース
#include <stdio.h> #include <string.h> struct zzz{ int main(void) strcpy(po->nm,”カローラ”); printf(“車名%s\n”, po->nm); strcpy(po->nm,”エスティマ”); printf(“車名%s\n”, po->nm); |
ソースコード解説
構造体名zzzを作成し、構造体変数【 struct zzz dat; 】を宣言し次に【 struct zzz *po 】ポインタ宣言し【 dat 】のアドレスをポインタに代入しています【 struct zzz *po = &dat; 】
変数だとメンバ指定の際【 . 】(ドット)を用いて指定していたのに対して、ポインタにてメンバ指定する際【 -> 】(アロー演算子)を用いている点に注意して下さい。
値の代入に付いては、構造体にて用意した変数名に代入しそれぞれ出力しております。
実行結果
コメント