C 語言中的結構體陣列
Satishkumar Bharadwaj
2023年1月30日
2020年12月19日
本教程介紹瞭如何在 C 語言中建立一個結構體陣列,它是多個結構變數的集合,每個變數都包含了不同實體的資訊。
C 語言中的結構體陣列
陣列是同一資料型別的順序集合,結構體是使用者定義的資料型別。結構體陣列的宣告與原始資料型別的陣列相同,但使用結構體有其元素的資料型別。
考慮一個名為 Student
的結構體的例子,如下所示。
struct Student
{
int rollNumber;
char studentName[10];
float percentage;
};
我們可以像下面這樣宣告一個結構陣列。
struct Student studentRecord[5];
這裡,studentRecord
是一個由 5 個元素組成的陣列,其中每個元素的型別是 Student
結構體。單個元素使用索引符號 []
訪問,成員使用點 (.)
運算子訪問。
studentRecord[0]
指向陣列的 0th
元素,studentRecord[1]
指向陣列的 1th
元素。
同理,
studentRecord[0].rollNumber
指的是陣列第 0 個元素中的rollNumber
成員。studentRecord[0].studentName
是指陣列第 0 個元素中的studentName
成員。studentRecord[0].percentage
是指陣列第 0 個元素的percentage
成員。
在 C 語言中宣告一個 struct
陣列的完整程式如下。
#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()
函式建立一個 struct
陣列
在 C 語言中,還有另一種方法可以製作 struct
陣列,可以使用 malloc()
函式為 struct
陣列分配記憶體。這就是所謂的動態記憶體分配。
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