C言語の構造体配列とは?宣言方法とサンプルコードをわかりやすく解説
構造体配列とは
C言語における構造体の配列とは、異なるデータ型の変数をひとつの名前のもとにまとめて管理できるコレクションのことです。複数の関連するデータを扱う際に非常に便利な機能です。
構造体宣言の一般形
構造体の宣言は、以下の形式で行います。
struct タグ名{
データ型 メンバ1;
データ型 メンバ2;
データ型 メンバn;
};ここで、struct はキーワード、タグ名 は構造体の名前を指定します。メンバ1、メンバ2 などは、構造体を構成するデータ項目を表します。
宣言例
以下は、書籍情報を管理する構造体の宣言例です。
struct book{
int pages;
char author[30];
float price;
};構造体配列のポイント
C言語において、構造体の最も一般的な使い方が構造体の配列です。
構造体の配列を宣言するには、まず構造体を定義し、その後その型の配列変数を定義します。
例: struct book b[10]; // book型の構造体配列に10個の要素を確保する
サンプルプログラム
次のプログラムは、学生の情報を構造体の配列で管理し、表示する例です。
#include <stdio.h>
#include <string.h>
struct student{
int id;
char name[30];
float percentage;
};
int main(){
int i;
struct student record[3];
// 1人目の学生のデータ
record[0].id=1;
strcpy(record[0].name, "Bhanu");
record[0].percentage = 86.5;
// 2人目の学生のデータ
record[1].id=2;
strcpy(record[1].name, "Priya");
record[1].percentage = 90.5;
// 3人目の学生のデータ
record[2].id=3;
strcpy(record[2].name, "Hari");
record[2].percentage = 81.5;
for(i=0; i<3; i++){
printf(" Records of STUDENT : %d \n", i+1);
printf(" Id is: %d \n", record[i].id);
printf(" Name is: %s \n", record[i].name);
printf(" Percentage is: %f\n\n",record[i].percentage);
}
return 0;
}
実行結果
上記のプログラムを実行すると、以下のような結果が出力されます。
Records of STUDENT : 1
Id is: 1
Name is: Bhanu
Percentage is: 86.500000
Records of STUDENT : 2
Id is: 2
Name is: Priya
Percentage is: 90.500000
Records of STUDENT : 3
Id is: 3
Name is: Hari
Percentage is: 81.500000
このように、構造体の配列を使うことで、複数の学生データをひとつの変数でまとめて管理し、ループ処理で効率よくアクセスできます。
-
C言語におけるユニオンとポインタの使い方を徹底解説
ユニオン(共用体)とは、異なるデータ型を持つ複数の変数が、同一のメモリ領域を共有するための仕組みです。構造体が各メンバーごとに独立したメモリを割り当てるのに対し、ユニオンではすべてのメンバーが同じアドレスを参照するという点が大きな特徴です。 ユニオンの構文 ユニオンを定義するときの基本的な書式は次の通りです。 union タグ名{ データ型 メンバー1; データ型 メンバー2; ---- ---- データ型 メンバーn; }; 実際の記述例を見てみましょう。 union sample{ int a; float b; char
-
C言語のポインタ入門!宣言・初期化から配列アクセスの実例まで徹底解説
ポインタ(pointer)とは、他の変数のメモリアドレスを格納するための変数です。C言語においてポインタは、メモリを直接操作したり、関数間でデータを効率的にやり取りしたりするために欠かせない重要な概念です。 ポインタの宣言・初期化とアクセス まず、次のような通常の整数変数の宣言を見てみましょう。 int qty = 179; 変数qtyには値「179」が格納されると同時に、メモリ上のどこかにその格納場所(アドレス)が割り当てられます。 ポインタの宣言 int *p; 「p」はポインタ変数であり、別の整数型(int)変数のアドレスを保持します。変数名の前にアスタリスク(*)を付けることで、「こ