十 結構體聯合列舉

2022-05-15 20:16:14 字數 3866 閱讀 7816

1.結構體 關鍵字 struct定義乙個結構體型別 .點運算子 ->箭頭運算子

陣列 存放一組相同型別的資料

存放一組不同型別的資料 結構體型別

存放乙個學生的資訊 學號 姓名

1

struct student //

結構體型別 存放什麼型別的資料2;

89void myfun(struct

student stu1)

1014

void myfun2(struct student *p)

1524

void test()//

結構體25

;

3435 printf("

id是%d\n

", beiwang.id);//

結構體成員使用方式 結構體變數.成員

36 printf("

名字是%s\n

", beiwang.name);

3738

struct student arr[10

];39

for (int i = 0; i < 10; ++i)

4044

struct student *p;

45 p = (struct student *)malloc(sizeof(struct student) * 10

);46

47 p[0

].name;

4849

free

(p);50}

51void

test2()

52

取別名 給結構體型別取乙個更短的名字 方便使用

typedef 型別 別名

typedef int myint ;使用別名和使用型別是一致的

1 typedef struct student st; //

st作為結構體型別的別名

2 typedef struct student* pst;//

pst 結構體指標型別的別名

34 typedef struct

teacher

5te, *pte; //

定義型別的時候取別名9//

te 相當於結構體型別

10//

pte 結構體指標型別的別名

1112

13 typedef int myint;

作用 型別名字太長 取乙個短的名字方便

取一些別名有助於提高**的可讀性

結構體大小 結構體對齊

結構體大小 >= 結構體所有成員大小之和

這個str的結構體所占用的空間為32

存在對齊操作的目的 取成員的時候 提高效率 通過浪費空間來提高執行效率

比較小的成員放到前面 減少記憶體對齊浪費的空間

2.聯合 union

共用體共同使用乙個空間 存放一般同時只能存放乙個資料

1 union testnum    //

聯合型別定義方式

2;

聯合大小 >= 聯合最大成員大小之和

1 printf("

聯合大小 %d\n

", sizeof

(union testnum));

2union testnum num;

3 num.y = 3.14f

;4 printf("

%x", num.x);

3.列舉

switch 分支

case

把型別的值 全部列舉出來 方向 上下左右四個方向

enum 列舉的關鍵字

1

enum

dir2; 5

enum

week6;

910void

test4()

1128 }

列舉這個型別所有可能的值 

這些常量可以手動設定他們的值

常量有名字 提高**的可讀性

在定義的時候 沒有給他設定初值 那麼預設從0開始 後乙個是前乙個加1

1 #include2 #include3 #include45

struct student //

結構體型別 存放什麼型別的資料6;

1213 typedef struct student st; //

st作為結構體型別的別名

14 typedef struct student* pst;//

pst 結構體指標型別的別名

1516

//---> student 完整的型別 strcut student

1718

void myfun(struct

student stu1)

1923

void myfun2(struct student *p)

2433

void test()//

結構體34

;

4344 printf("

id是%d\n

", beiwang.id);//

結構體成員使用方式 結構體變數.成員

45 printf("

名字是%s\n

", beiwang.name);

4647

struct student arr[10

];48

for (int i = 0; i < 10; ++i)

4953

struct student *p;

54 p = (struct student *)malloc(sizeof(struct student) * 10

);55

56 p[0

].name;

5758

free

(p);59}

6061 typedef struct

teacher

62te, *pte; //

定義型別的時候取別名

66//

te 相當於結構體型別

67//

pte 結構體指標型別的別名

6869

70 typedef int

myint;

7172

void

test2()

7378

79struct

str80;86

87 union testnum //

聯合型別定義方式88;

9394

void fun(int da[20]) //

int (*da)[20]

95102

}103

}104

105106

107//

列舉108

enum

dir109

; //

有名字的常量 可以放到switch的case後面

112//

這些常量可以手動設定值

113//

常量有名字 提高**的可讀性

114//

在定義的時候 沒有給他設定初值 那麼預設從0開始賦值 後乙個是前乙個加1

115116

enum

week

117;

120121

void

test4()

122139

}140

141142

143int

main()

144

整體**

結構體,列舉,聯合

結構體 1.結構體的建立 1 在構建結構體之前,必須要對結構體進行宣告。例 struct student 描述乙個學生,student為標籤 此處的分號不能丟,此處也可寫變數 2 成員訪問 2.1在 1 中的 struct student 相當於型別,比如 int型,struct student s...

結構體 聯合 列舉

一般的,在宣告乙個結構提示要使用struct關鍵字,例如 建立乙個學生 struct stu char name 20 名字 int age 年齡 char 5 性別 char id 20 學號 分號不能丟結構體得特殊宣告 沒有結構體名 structx 沒有結構體的標籤,就不能在結構體建立完成之後再...

結構體,列舉,聯合。

今天我們來學習一下結構體,列舉以及聯合等知識。一。首先從結構體開始,結構體與陣列一樣都是聚合型別。1.結構體的宣告 struct tag variable list tag 1 可以省略 2 見名思意 3 盡量不省略。member list 不能為空。variable list 可以省略。例如 描述...