struct(結構體)
struct
,或稱為結構體,是C語言中一種復合數據類型,它允許你將多個不同類型的數據項組合成一個單一的單位。這對于創建記錄或更復雜的數據結構非常有用。
結構體的定義語法如下:
struct 結構體名稱 {數據類型 成員1;數據類型 成員2;// 更多成員...
};
例如,定義一個表示點的結構體:
struct Point {int x;int y;
};
在這個例子中,Point
結構體包含兩個整型成員:x
和 y
。
typedef
typedef
是用來給數據類型(包括基本類型、結構體、聯合體等)定義一個新名字的關鍵字。使用 typedef
可以簡化復雜數據類型的聲明,提高代碼的可讀性和便利性。
例如,使用 typedef
為 struct Point
定義一個新名字:
typedef struct Point {int x;int y;
} Point;
使用 typedef
后,你可以直接使用 Point
來聲明該結構體類型的變量,而不需要每次都寫 struct Point
:
Point p1, p2;
結合 typedef 和 struct 使用
在C語言中,經常看到 typedef
和 struct
結合使用。這樣做的目的是為了簡化結構體類型的聲明。例如:
typedef struct SequentialList {int data[MAX_SIZE];int length;
} SequentialList;
這里定義了一個名為 SequentialList
的結構體,并通過 typedef
同時創建了一個新名字(也叫 SequentialList
)。如此一來,在聲明變量時就可以直接使用 SequentialList
,而不必再寫 struct SequentialList
。
總結起來,struct
用于定義新的結構體類型,而 typedef
用于為類型(包括結構體類型)創建新的別名,兩者結合使用可以提高代碼的可讀性和易用性。
內存分配
#include <stdio.h>
#include <stdlib.h>typedef struct student {int *age;int *score;
} Student;int main() {// 為結構體分配內存Student *stu = malloc(sizeof(Student));if (stu == NULL) {// 處理內存分配失敗return 1;}// 為 age 數組分配內存(假設 10 個整數)stu->age = malloc(10 * sizeof(int));if (stu->age == NULL) {// 處理內存分配失敗free(stu);return 1;}// 為 score 數組分配內存(假設 100 個整數)stu->score = malloc(100 * sizeof(int));if (stu->score == NULL) {// 處理內存分配失敗free(stu->age);free(stu);return 1;}// 使用 stu 結構體...// 釋放分配的內存free(stu->age);free(stu->score);free(stu);return 0;
}
我有時候擔心在分配內存的時候會導致point的內存不夠用,但是指針型變量的大小是固定的,在C語言中,結構體分配的內存大小是由其成員決定的。,Student
結構體包含兩個成員:兩個整數指針 int *y
和 int *x
。結構體分配的內存大小僅足以存儲這兩個指針,而不是指針所指向的數據。