在現實世界的數據建模中,一組相關數據往往包含不同類型。以學生信息為例:姓名屬字符型、學號可為整型或字符型、年齡為整型、性別為字符型、成績則可能是整型或浮點型。陣列要求所有元素類型一致,無法滿足這種異構數據的存儲需求。C語言因此引入「結構」——一種由若干「成員」組成的構造數據類型,相當於其他高級語言中的「記錄」。
定義結構的通用語法如下:
struct 結構名
{
成員列表
};
成員列表由多個成員組成,每個成員需指定類型:
類型說明符 成員名;
例如定義學生結構:
struct stu
{
int num; // 學號
char name[20]; // 姓名
char sex; // 性別
float score; // 成績
};
注意結尾分號不可省略。定義後,結構成為一種新的復雜數據類型,包含固定數量、不同類型的有序變量集合。
以 struct stu 為例:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
struct stu boy1, boy2;
亦可配合宏定義簡化:
#define STU struct stu
STU boy1, boy2;
struct stu
{
int num;
char name[20];
char sex;
float score;
} boy1, boy2;
struct
{
int num;
char name[20];
char sex;
float score;
} boy1, boy2;
第三種方式省略結構名,直接給出變量。三種方式聲明的 boy1、boy2 均擁有相同結構佈局。
結構變量在程序中通常不作為整體操作,而是通過「成員運算符 `.`」訪問單個成員,如 boy1.num、boy1.score。
成員本身可以是另一個結構,形成嵌套結構。例如引入日期結構:
struct date
{
int month;
int day;
int year;
};
struct
{
int num;
char name[20];
char sex;
struct date birthday; // 嵌套結構
float score;
} boy1, boy2;
此處 birthday 為 struct date 類型。成員名可與程序中其他變量同名,互不干擾。
結構體是C語言處理異構數據的核心機制,通過成員組合實現數據的邏輯封裝。掌握定義、聲明、嵌套及成員訪問,是編寫高質量C程序的基石。後續將探討結構指針、動態分配及聯合體等進階主題。