1. 程式人生 > >C結構體、共用體、列舉

C結構體、共用體、列舉

一、結構體三種定義方式 1、先宣告結構體型別,再定義變數名 struct student { int num; char name[20]; char sex; int age; char addr[30]; } struct student student1,student2; 2、在宣告型別的同時宣告變數 struct student { int num; char name[20]; char sex; int age; char addr[30]; } student1,student2 3、直接定義結構體型別變數 struct { int num; char name[20]; char sex; int age; char addr[30]; } student1,student2 不出現結構體名 二、共用體 1、概念 : 使幾個不同的變數共佔同一段記憶體的結構稱為 “共用體”型別的結構。 union 共用體名 { 成員列表

}變數列表 union data { int i; char ch; }a,b,c; 結構體變數所佔記憶體長度是各成員佔的記憶體長度之和。每個成員分別佔有其自己的記憶體單元。 共用體變數所佔的記憶體長度等於最長的成員的長度。 例如: 上面定義的“共用體”變數a、b、c各佔4個位元組(因為一個實/整型變數佔4個位元組),而不是各佔4+1+4=7個位元組 2、特點 1)同一個記憶體段可以用來存放幾種不同型別的成員,但在每一瞬時只能存放其中一種,而不是同時存放幾種。

2)共用體變數中起作用的成員是最後一次存放的成員,在存入一個新的成員後原有的成員就失去作用。

3)共用體變數的地址和它的各成員的地址都是同一地址。 4)不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值,又不能在定義共用體變數時對它初始化。

5)不能把共用體變數作為函式引數,也不能使函式帶回共用體變數,但可以使用指向共用體變數的指標

6)共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別定義中,陣列也可以作為共用體的成員。 三、列舉 1、定義 enum weekday{sun,mou,tue,wed,thu,fri,sat}; enum weekday a,b,c; 或 enum weekday{sun,mou,tue,wed,thu,fri,sat}a,b,c; 或 enum {sun,mou,tue,wed,thu,fri,sat}a,b,c; 類似與結構體的定義方式,關鍵字為enum 2、特點 1)應該說明的是,列舉型別是一種基本資料型別,而不是一種構造型別,因為它不能再分解為任何基本型別。 2)在C編譯中,對列舉元素按常量處理,故稱列舉常量。它們不是變數,不能對它們賦值。