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

2021-08-21 22:41:33 字數 3186 閱讀 2328

二、列舉

三、聯合

1.結構體型別建立

struct stu//定義乙個學生結構體

;//分號不能丟

特殊的宣告:在宣告結構的時候,可以不完全的宣告

比如:匿名結構體型別

struct

x;struct

a[20],*p;

//p=&x;**非法,編譯器會把上面的兩個宣告當成完全不同的兩個型別

結構的不完整宣告

struct b;//不完整宣告

struct a

;struct b

;

2.結構成員的訪問

結構體變數訪問成員

結構體變數的成員是通過點操作符(.)。點操作符接受兩個運算元。例如:

;struct stu s;//定義結構體變數

strcpy(s.name, "zhangsan");//使用.訪問name成員

s.age = 18;//使用.訪問age成員

結構體訪問指向變數的成員

訪問指向乙個指向結構體變數的指標

struct s

s;void print(struct s *ps)

3.結構的自引用
struct node

;

注意:型別重新命名用typedef

typedef

struct node

node;

4.結構體變數的定義和初始化
struct point

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

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

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

struct point p3 = ;

struct stu//型別宣告

;struct stu s = ;//初始化

struct node

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

struct node n2 = , null };//結構體巢狀初始化

5.結構體內存對齊

為什麼存在記憶體對齊?

(1)平台原因(移植原因)

不是所有的硬體平台都能訪問任意位址上的任意資料的;某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常。

(2)效能原因(空間換取時間)

資料結構(尤其是棧)應該盡可能地在自然邊界上對齊;而對齊的記憶體訪問僅需要一次訪問。

總結:結構體的記憶體對齊是拿空間來換取時間的做法。

姐狗提的對齊規則:

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

(2)其它成員變數要對齊盜對齊數的整數倍的位址處。

對齊數=編譯器預設的乙個對齊數與該成員大小的較小值。vs的預設值為8,linux的預設值為4。

例如:

6.結構體傳參

struct s

;struct s s =

void print1(struct s s) //結構體傳參

void print2(struct s* s) //結構體位址傳參

int main()

1.列舉型別的定義
enum day  //星期

;enum *** //性別

;enum color //顏色

;

{}中的內容是列舉型別的可能取值,也叫列舉常量。這些可能取值都是有值的,預設從0開始,一次遞增1,在定義的時候也可以賦初值。

如:

enum  color    // 顏色

;

2.列舉的使用
enum  color    // 顏色

;enum color clr = green; //只能拿列舉常量給變數賦值,才不會出現型別的差異

clr = 5; //不可以

3.列舉的特點

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

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

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

(4)便於除錯

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

1.聯合型別的定義

聯合型別定義的變數包含一系列的成員,特徵是這些成員公用同一塊空間(所以聯合也叫共用體)。

比如:

//聯合型別的宣告

union un

;union un un; //聯合變數的定義

int main()

2.聯合的特點

聯合的成員是共用一塊記憶體空間的,這樣乙個聯合變數的大小,至少是最大成員的打大小(因為聯合至少得有能力儲存最大的那個成員)

union un

;union un un;

int main()

面試題:判斷當前計算機的大小端儲存

//**1

intcheck()

//**2

intcheck()

un; un.i=1;

return un.c;

}int main()

else

return

0;}

3.聯合大小的計算

(1)聯合的大小至少是最大成員的大小

(2)當最大成員不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。

union un1

;union un2

;int main()

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

結構 結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。struct tag variable list 宣告定義後所定義的成員變數 描述乙個學生 struct student 結構體的自引用 結構正確的自引用方式 struct node 2 typedef struct ...

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

結構體的基礎知識 結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。結構體的宣告 例如描述乙個學生 struct stu s s為變數列表 typedef struct stu s,p s,p為型別在宣告結構的時候,可以不完全的宣告。匿名結構體型別 struct x str...

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

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