C語言基礎---特殊的變數型別(結構體、列舉、共用體)
1.結構體
C語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,它稱為結構體,在其他一些高階語言中稱為“記錄”。
struct Student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
宣告一個結構體型別一般形式為:
struct 結構體名
{成員列表};
注意:結構體型別的名字是由一個關鍵字struct 和結構體名組合而成的(例如struct Student),其中Student就是結構體名,但是這個變數的資料型別是struct Student。
結構體變數的引用由兩種方式:①用“.”符號,結構體變數.結構體內的成員變數;②用“->”符號,結構體指標變數名->結構體成員變數。
2.共用體
有時候想用一段記憶體單元存放不同型別的變數。例如把一個短整型變數,一個字元型變數和一個實型變數放在同一個地址開始的記憶體單元中。以上三個變數在記憶體中佔得位元組數不同,但都是從同一地址開始存放,也就是使用覆蓋技術,後一個數據覆蓋了前一個數據。這種使幾個不同的變數共享同一段記憶體的結構成為“共用體”型別的結構。
定義公用特型別變數的方式一般如下:
union 共用體名 { 成員表列; }變量表列;
結構體變數所佔得記憶體長度是各成員佔得記憶體長度之和,而共用體所佔得記憶體長度等於最長的成員長度。
引用共用體變數的方式:只有先定義了共用體變數才能引用它,但應注意,不能引用共用體變數,而只能引用共用體變數中的成員。
共用體型別資料的特點:
(1)同一個記憶體段可以用來存放不同型別的成員,但在每一瞬時只能存放其中一個成員,而不是同時存放幾個;
(2)可以對共用體變數初始化,但初始化表中只能有一個常量;
(3)共用體變數中起作用的成員是最後一次被賦值的成員;
(4)共用體變數的地址和他各成員變數的地址都是同一地址。
3.列舉變數
如果一個變數只有幾種可能的值,則可以定義為列舉型別,所謂列舉就是把可能的值一一列舉出來,變數的值只限於列舉出來的值的範圍內。
宣告列舉型別用enum開頭。例如:
enum weekday{sun,mon,tue,wed,thu,fri,sat};
以上聲明瞭一個列舉型別enum weekday workday,weekend; /*後面兩個是列舉變數*/
花括號中的sun,mon,...,sat成為列舉元素或者列舉常量。
說明:(1)c編譯對列舉型別的列舉元素按常量處理,故稱為列舉常量,不要因為它們是識別符號而把它們看作變數,不能對其進行賦值。
(2)每一個列舉元素都代表一個整數,c語言按照定義時的順序預設它們的值為0,1,2,3,4,5....在上面的定義中。sum的值為0,mon的值為1,如果有賦值語句:workday = Mon;相當於workday = 1。