C結構體 共用體 列舉

2021-08-30 08:47:23 字數 1168 閱讀 1179

一、結構體三種定義方式

1、先宣告結構體型別,再定義變數名

struct student

struct student student1,student2;

2、在宣告型別的同時宣告變數

struct student

student1,student2

3、直接定義結構體型別變數

struct

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;

enum weekday a,b,c;

或enum weekdaya,b,c;

或enum a,b,c;

類似與結構體的定義方式,關鍵字為enum

2、特點

1)應該說明的是,列舉型別是一種基本資料型別,而不是一種構造型別,因為它不能再分解為任何基本型別。

2)在c編譯中,對列舉元素按常量處理,故稱列舉常量。它們不是變數,不能對它們賦值。

C 結構體 共用體 列舉

一 結構體 首先為什麼要使用結構體?比如說你要儲存乙個學生的資訊,包含 姓名 char 學號 int 成績 double 我們希望可以把這些資訊放在乙個單元中,陣列滿足不了這種要求,因為陣列中每個元素的型別是一樣的。所以我們就需要別外一種資料格式,以就是現在要說的結構體 結構體是由使用者自己定義的一...

結構體 共用體 列舉

結構體 共用體 列舉 分析 首先宣告的結構體元素year的位址是最低的 0012ff74 而最後宣告的day的位址是最高的 0012ff7c 而我們又知道在棧中宣告變數的時候,位址是從高到低的分配的.因此,切記在結構體中宣告的變數與直接在外面宣告是不一樣的.在結構體中,最先宣告的變數放在最低位的.另...

列舉,結構體,共用體

列舉的定義 enum log level dbg,inf,war,err,fat,all,offvoid writeinfor log level level switch level case dbg printf d n dbg 上述定義的列舉型別,預設為dbg 0,inf 1,依次類推。1 列...