分析自定義型別 結構體 列舉 聯合

2021-09-26 13:19:17 字數 1595 閱讀 3539

1.結構體

結構體的宣告:

結構體是一些值的集合,這些值稱為成員變數,結構的每個成員可以是不同型別的變數。

例如描述乙個學生的資訊

struct student

;

結構體還可以自引用

正確的自引用方式:

struct node

;

結構體變數的定義和初始化

struct point

p1;//宣告型別的同時定義變數p1

struct point p2;//定義結構體變數p2

//初始化:定義變數的同時賦初值

struct point p3=;

struct stu

;struct stu s=;//初始化

struct node

n1=,null};//結構體巢狀初始化

結構體內存對齊:

結構體的對齊規則:

(1)第乙個成員在與結構體變數偏移量為0的位址處。

(2)其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。(對齊數=編譯器預設的乙個對齊數與該成員大小的較小值)

(3)結構體總大小為最大對齊數的整數倍。

(4)如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整數大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。

結構體傳參:函式傳參的時候,引數是需要壓棧的,會有時間和空間上的系統開銷。如果傳遞乙個結構體物件的時候,結構體過大,引數壓棧的系統開銷比較大,所以會導致效能的下降。所以結構體傳參的時候,要傳結構體的位址。

2.列舉

列舉顧名思義就是一一枚舉,把可能取到的值一一枚舉出來。

例如

enum day//星期

;enum ***//性別

;enum color//顏色

;

以上定義的enum day,enum ***,enum color都是列舉型別,中的內容是列舉型別的可能取值,也叫列舉常量。這些可能取值都是有值的,預設從0開始,依次遞增1,當然在定義的時候也可以賦初值。

列舉的優點:

(1)增加**的可讀性和可維護性

(2)和#define定義的識別符號比較列舉有型別檢查,更加嚴謹

(3)防止了命名汙染(封裝)

(4)便於除錯

(5)使用方便,一次可以定義多個常量

3.聯合(共用體)

聯合型別的定義:聯合也是一種特殊的自定義型別,這種型別定義的變數也包含一系列的成員,特徵是這些成員公用同一塊空間。

//聯合型別的宣告

union un

;//聯合變數的定義

union un un;

printf("%d\n",seziof(un));

聯合的特點:聯合的成員是共用一塊記憶體空間的,這樣乙個聯合變數的大小,至少是最大成員的大小。

聯合大小的計算:(1)聯合的大小至少是最大成員的大小(2)當最大成員大小不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。

自定義型別 結構體 列舉 聯合

結構體 所謂結構體,就是將一大堆值放在一起,建立乙個新的型別,這些成員可以是不同型別的變數。struct tag variable list tag 要求 1.見名知意 2.可以省略 3.不建議省略 member list c語言中,不能為空 variable list 變數列表,可以省略,建議省略...

自定義型別 結構體,列舉,聯合

首先先說一下c語言的資料型別,其框架型別如圖所示 今天主要說一下結構體,列舉,聯合這三種自定義型別。1,結構體 1.1 結構體的宣告 結構體是一些值的集合,這些值稱為成員變數,結構體的每個成員可以是不同型別得變數。1 結構體的成員 結構體的成員可以是標量,陣列,指標,甚至是其他結構體。2 結構體的宣...

自定義型別 結構體,列舉,聯合

結構體的宣告 struct tag variable list 例如描述乙個學生 struct stu 分號不能丟特殊的宣告 在宣告結構的時候,可以不完全的宣告。比如 匿名結構體型別 struct x struct a 20 p 警告 編譯器會把上面的兩個宣告當成完全不同的兩個型別。所以是非法的。結...