C 語言中的結構體陣列

Satishkumar Bharadwaj 2023年1月30日 2020年12月19日
  1. C 語言中的結構體陣列
  2. 使用 C 語言中的 malloc() 函式建立一個 struct 陣列
C 語言中的結構體陣列

本教程介紹瞭如何在 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

相關文章 - C Array

相關文章 - C Struct