1、結構體:存放一組不同類型的數據
- 結構體的定義
struct student { int num;
float MathScore; float EnlishScore; }stu1;也可以用typedef來定義
typedef struct student { int num;
float MathScore; float EnlishScore; }stu; - 也可以定義結構體數組和指針
struct student { int num; float MathScore; float EnlishScore; }stu1,*stu2,stu3[10];
- 結構體的使用
- 普通的結構體變量
stu1 = { 1,66,88 }; printf("%d\n", stu1.num); printf("%f\n", stu1.MathScore); printf("%f\n", stu1.EnlishScore);
- 結構體指針變量
#include <stdio.h> struct student { int num; float MathScore; float EnlishScore; }; int main() { student stu1; stu1 = { 12, 66.6,76.5 }; student *pstu = &stu1; printf("學號是%d,今年的數學成績是%.1f,今年的英語成績是%lf!\n", (*pstu).num, (*pstu).MathScore, (*pstu).EnlishScore); printf("學號是%d,今年的數學成績是%.1f, 今年的英語成績是%lf!\n", pstu->num, pstu->MathScore, pstu->EnlishScore); return 0; }
- 普通的結構體變量
- 結構體的初始化
stu1 = { 12, 66.6,76.5 };
stus[] = { {"Zhou ping", 5, 18, 'C', 145.0}, {"Zhang ping", 4, 19, 'A', 130.5}, {"Liu fang", 1, 18, 'A', 148.5}, {"Cheng ling", 2, 17, 'F', 139.0}, {"Wang ming", 3, 17, 'B', 144.5} };
2、枚舉類型:C語言提供了一種枚舉(Enum)類型,能夠列出所有可能的取值
-
枚舉類型的定義
enum typeName{ valueName1, valueName2, valueName3, ...... };
enum是一個新的關鍵字,專門用來定義枚舉類型,這也是它在C語言中的唯一用途;
typeName
是枚舉類型的名字;valueName1, valueName2, valueName3, ......
是每個值對應的名字的列表。 - 枚舉類型的初始化
enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };//依次對week成員賦值;
enum week {a, b, c};//如何沒有直接賦值,則從第一個成員為0,后面的成員依次增加;
enum week {a, b=5, c};//前面不變,b=5,后面依次增加;
- 枚舉類型的使用
#include <stdio.h> #include <stdlib.h> typedef enum weekday { mon, tue, wen, tur, fri, sat, sun }Weekday; Weekday test_enum() { Weekday Today = mon; return Today; } int main() { printf("%d\n", test_enum()); //輸出0; return 0; }
3、共用體
- 定義共用體並創建變量
union data{ int n; char ch; double f; } a, b, c;
- 與結構體一樣,共用體也是存放不同數據類型的變量
- 結構體和共用體的區別在於:結構體的各個成員會占用不同的內存,互相之間沒有影響;而共用體的所有成員占用同一段內存,修改一個成員會影響其余所有成員。
- 結構體占用的內存大於等於所有成員占用的內存的總和(成員之間可能會存在縫隙),共用體占用的內存等於最長的成員占用的內存。共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。