引申出結構體的定義
假設我們現在要開發一個圖書管理系統,當有讀者要借閱圖書的時候,需要登記讀者信息,讀者的信息有:1 姓名,2 年齡,3 學號。那麼,就分析:
(1) 讀者的姓名是字符,使用字符數組來存放,可以定義:char name[32];
(2) 讀者的年齡是數值,使用整形變量來存放,可以定義:int age;
(3) 讀者的學號是數值,使用整形變量來存放,可以定義:int number;
此時,定義的這3個變量就表示了一個讀者的信息。如果有3個讀者的信息,那麼,應該怎麼樣設計?我們可以想到如下的方法:
char name1[32]; int age1; int number1; --- 表示第 1 個讀者
char name2[32]; int age2; int number2; --- 表示第 2 個讀者
char name3[32]; int age3; int number3; --- 表示第 3 個讀者
這樣就表示3個讀者的信息,假設讀者的信息改變了,需要給讀者添加一個電話號碼的信息,那麼,這種代碼設計就不夠靈活,擴展性差;
針對這種問題,C語言提供了“結構體”的定義,定義出來的結構體就是一種數據類型,可以用它來定義變量。
結構體類型是由多個“成員”組成,每一個成員可以是“基本數據類型”或者“結構體類型”定義的變量。結構體的定義格式如下:
struct 結構體類型名
{
成員列表;
};
結構體類型的定義格式,需要注意如下幾點:
(1) 必須使用關鍵字 struct 開始,然後,接着空格,再接着我們自定義的結構體類型名;
(2) 結構體類型名是一個合法的標示符;
(3) 結構體類型名後面接着大括號;在大括號中定義成員列表;
(4) 成員列表是由“基本數據類型”或“結構體類型”定義的變量;
(5) 在結構體類型定義的末尾,必須使用引號“;”作爲結束符;
那麼,可以使用定義好的“結構體類型”來定義變量,定義變量的格式與基本數據類型定義變量格式一樣,如下:
struct 結構體類型名 變量名;
所以,對於前面提到的“讀者信息定義問題”,就可以使用結構體類型來解決。我們可以定義一個結構體類型,裏面的成員就是讀者的信息。定義讀者信息的結構體類型如下:
//定義結構體類型
struct reader
{
//定義結構體的成員;
char name[32]; //讀者姓名
int age; //讀者年齡
int number; //讀者學號
};
此時,我們就把一個讀者的信息封裝到一個結構體類型中。那麼,就可以使用該結構體類型來定義一個讀者變量。例如:
struct reader r1; //用定義的結構體類型定義變量
struct reader r2;
struct reader r3;
此時,我們就定義了讀者變量,完整地表示了讀者的信息。如果要對讀者的結構進行修改,增加一個電話號碼的屬性,或者去掉學號的屬性,直接修改struct reader結構體的定義就可以了。非常靈活,提高程序設計的靈活性和系統的擴展性。
結構體類型作爲一種自定義的數據類型,可以用來定義變量;那麼,也可以嵌入到其他結構體的成員變量中定義成員。例如,圖書館規定一天只能夠接納500位讀者,那麼,可以定義如下的結構體:
//定義圖書館結構體
struct library
{
//定義一天中登記的讀者集合
struct reader people[500];
int start_time; //圖書館開館時間
int end_time; //圖書館閉館時間
};
可以看到,定義了struct library結構體類型,該類型中的成員列表,有基本數據類型定義的變量,也有結構體類型定義的變量。
更多的交流可以訪問:www.mylinux.vip 加QQ:1523520001,微信:13926572996,備註:linux編程;
學習、分享更多的linux C/C++ 編程知識。