C 语言中的结构体数组
    
    
            Satishkumar Bharadwaj
    2023年10月12日
    
    C
    C Array
    C Struct
    
 
本教程介绍了如何在 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
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe