C の構造体の配列
 
このチュートリアルでは、C 言語で構造体の配列を作成する方法を紹介します。これは、複数の構造体変数の集合であり、各変数には異なるエンティティに関する情報が含まれています。
C 言語の struct の配列
    
配列は同じデータ型の連続したコレクションであり、構造体はユーザー定義のデータ型です。構造体の配列の宣言は、原始データ型の配列と同じですが、構造体はその要素のデータ型を持っています。
以下のような Student という名前の構造体の例を考えてみましょう。
struct Student {
  int rollNumber;
  char studentName[10];
  float percentage;
};
構造体の配列を宣言すると以下のようになります。
struct Student studentRecord[5];
ここでは、studentRecord は 5つの要素からなる配列であり、各要素の型は struct Student です。個々の要素にはインデックス記法 [] を用いてアクセスし、メンバにはドット . 演算子を用いてアクセスします。
studentRecord[0] は配列の 0 番目の要素を指し、studentRecord[1]は配列の1 番目の要素を指します。
同様に、studentRecord[1] は配列の 1st 要素を指します。
- studentRecord[0].rollNumberは配列の 0 番目の要素の- rollNumberメンバを参照します。
- studentRecord[0].studentNameは配列の 0 番目の要素の- studentNameメンバを参照します。
- studentRecord[0].percentageは配列の 0 番目の要素の- percentageメンバを参照します。
C 言語で構造体の配列を宣言する完全なプログラムは以下の通りです。
#include <stdio.h>
#include <string.h>
struct Student {
  int rollNumber;
  char studentName[10];
  float percentage;
};
int main(void) {
  int counter;
  struct Student studentRecord[5];
  printf("Enter Records of 5 students");
  for (counter = 0; counter < 5; counter++) {
    printf("\nEnter Roll Number:");
    scanf("%d", &studentRecord[counter].rollNumber);
    printf("\nEnter Name:");
    scanf("%s", &studentRecord[counter].studentName);
    printf("\nEnter percentage:");
    scanf("%f", &studentRecord[counter].percentage);
  }
  printf("\nStudent Information List:");
  for (counter = 0; counter < 5; counter++) {
    printf("\nRoll Number:%d\t Name:%s\t Percentage :%f\n",
           studentRecord[counter].rollNumber,
           studentRecord[counter].studentName,
           studentRecord[counter].percentage);
  }
  return 0;
}
出力:
Enter Record of 5 students
Enter Roll number:1
Enter Name: John
Enter percentage: 78
Enter Roll number:2
Enter Name: Nick
Enter percentage: 84
Enter Roll number:3
Enter Name: Jenny
Enter percentage: 56
  
Enter Roll number:4
Enter Name: Jack
Enter percentage: 77
   
Enter Roll number:5
Enter Name: Peter
Enter percentage: 76
    
   Student Information List
   Roll Number: 1		Name: John		percentage:78.000000
   Roll Number: 2		Name: Nick		percentage:84.000000
   Roll Number: 3		Name: Jenny		percentage:56.000000
   Roll Number: 4		Name: Jack		percentage:77.000000
   Roll Number: 5		Name: Peter		percentage:76.000000
       
C 言語の malloc() 関数を用いて構造体の配列を作成する
C で struct の配列を作成する別の方法があります。メモリは struct の配列に malloc() 関数を使用して割り当てることができます。これは動的メモリ割り当てと呼ばれます。
指定したサイズの単一のメモリブロックを動的に割り当てるには、malloc() (メモリ割り当て)関数を用います。この関数は void 型のポインタを返します。
返されたポインタは任意の形式のポインタにキャストすることができます。各ブロックはデフォルトのガベージ値で初期化されます。
関数 malloc() の構文は以下の通りです。
ptrVariable = (cast - type*)malloc(byte - size)
構造体の配列を動的に作成する完全なプログラムは以下の通りです。
#include <stdio.h>
int main(int argc, char** argv) {
  typedef struct {
    char* firstName;
    char* lastName;
    int rollNumber;
  } STUDENT;
  int numStudents = 2;
  int x;
  STUDENT* students = malloc(numStudents * sizeof *students);
  for (x = 0; x < numStudents; x++) {
    students[x].firstName = (char*)malloc(sizeof(char*));
    printf("Enter first name :");
    scanf("%s", students[x].firstName);
    students[x].lastName = (char*)malloc(sizeof(char*));
    printf("Enter last name :");
    scanf("%s", students[x].lastName);
    printf("Enter roll number  :");
    scanf("%d", &students[x].rollNumber);
  }
  for (x = 0; x < numStudents; x++)
    printf("First Name: %s, Last Name: %s, Roll number: %d\n",
           students[x].firstName, students[x].lastName, students[x].rollNumber);
  return (0);
}
出力:
Enter first name:John
Enter last name: Williams
Enter roll number:1
Enter first name:Jenny
Enter last name: Thomas
Enter roll number:2
    
First Name: John	Last Name: Williams		Roll Number:1
First Name: Jenny	Last Name: Thomas		Roll Number:2