構造体の配列としての使い方
この記事では、C言語で扱う構造体を配列で宣言する使い方の一つについて記載する。
1. 目的
・構造体を配列で宣言し、使用する方法について学ぶ
構造体については下記にも記載している:
・C言語基礎知識7(構造体1) - Project_OKI’s diary
・C言語基礎知識17(構造体とポインタとアロー演算子の使い方) - Project_OKI’s diary
目次
2. 構造体を配列で使用する方法
2.1プログラムの作成
///main.c #include <stdio.h> #include "main.h" int main(void){ int sel; sel = 1; // Your code here! ///構造体の宣言 CTRL ctrl[2]; ///構造体への代入 ctrl[0].select = SETA; ctrl[0].select2 = SETA; ctrl[1].select = SETB; ctrl[1].select2 = SETB; ///switch switch(ctrl[sel].select){ ///ctrl[0].selectの値を確認 case SETA: ///ctrl[0]の値を出力 printf("ctrl[%d].select = %d\n",sel,ctrl[sel].select); printf("ctrl[%d].select = %d\n",sel,ctrl[sel].select2); break; case SETB: ///ctrl[1]の値を出力 printf("ctrl[%d].select = %d\n",sel,ctrl[sel].select); printf("ctrl[%d].select = %d\n",sel,ctrl[sel].select2); break; default: break; } }
///main.h
typedef enum {SETA=0 ///< SETA = 0 ,SETB ///< SETB = 1 }SET; ///SET宣言構造体定義 typedef struct { SET select; SET select2; } CTRL;
実行結果:https://paiza.io/projects/uB6POkAhMYaPSyiATfAl4w?language=c
2.2 プログラムの説明
(a) CTRL ctrl[2];
通常の、配列の宣言と同じく、 型名 配列名[要素数]で配列を宣言する。
(b) ctrl[0].select = SETA;
CTRL構造体:ctrl[0] の . selectにSETA(0)を入力する。
上記のように、構造体の配列は変数と同じ使い方が出来る。
2.3 構造体で配列を使う必要性
配列は同じ種類の複数の要素を保持することができるため、
構造体の配列を使用すると、同じ種類の複数の構造体を効率的に扱うことができる。
これにより、
・データのまとまりを、複数使用したい場合
・for文などで、一気に処理したい場合に使用する。
2.4プログラムの作成(構造体と配列をfor文で回す)
///人情報 構造体 struct Person { char name[20]; int age; }; int main() { struct Person people[3]; ///< 構造体の配列を宣言する int i; ///< カウント用変数 /// 構造体の配列に値を設定する strcpy(people[0].name, "Alice"); people[0].age = 20; strcpy(people[1].name, "Bob"); people[1].age = 25; strcpy(people[2].name, "Charlie"); people[2].age = 30; /// 構造体の配列の値を表示する for (i = 0; i < 3; i++) { ///< iを0から3までループ printf("%s is %d years old.\n", people[i].name, people[i].age); } return 0; }
実行結果:https://paiza.io/projects/plwcFemvu2w8opHf6BfQ6Q?language=c
上記プログラムでは、
Peopleという人の情報のデータの塊を、構造体として定義し、
複数の人が居る場合を考え、People構造体を配列として宣言した。
これにより、人の情報に簡単にアクセス、複製できるようになった。
関連記事
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary
・知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary
・C言語基礎知識6(関数) - Project_OKI’s diary
・C言語基礎知識7(構造体1) - Project_OKI’s diary
・C言語基礎知識8(enum:列挙型) - Project_OKI’s diary
・C言語基礎知識9(typedef) - Project_OKI’s diary