>結構體類型創建
- struct Stu
- {
- char name[20];
- int age;
- };//分號不能丟
>結構體初始化
- //1.定義的同時初始化
- struct Person p1 = {"zhangsan",20,170};
- //2.先定義再逐個初始化
- struct Person p2;
- p2.name = "ykd";
- p2.age = 18;
- p2.heigth = 180;
- //3.先定義再一次性初始化
- struct Person p3;
- p3 = (struct Person){"lisi",18,180};
- //注意:結構體和數組在這裏的區別,數組不能先定義再進行一次性初始化
- //結構體要明確的告訴系統{}中是一個結構體
- //4.指定將數據賦值給指定的屬性
- struct Person p4 = {.heigth=1.77, .name="wangwu", .age=33};
>結構體內存對齊
1.第一個成員與結構體變量偏移量爲0的地址處;
2.其他成員變量要對齊到某個數字(對齊數)的整數倍地址處 。對齊數=編譯器默認的一個對齊數與該成員大小的較小值。VS中默認值爲8,Linux中默認值爲4
3.結構體總大小爲最大對其數的整數倍
4.嵌套的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對其數(含嵌套結構體的對齊數)的整數倍。
>位段,位段計算機大小。
位段的聲明和結構是類似的
1.位段成員必須是 int ,unsigned int 或signed int
2.位段成員名後面有一個冒號和一個數字(表示佔幾個比特位)
>枚舉+聯合。
- enum Day{ //星期
- Mon,
- Tue,
- Wed,
- Thur,
- Fri,
- Sat,
- Sun
- };
1.增加代碼的可讀性和可維護性
3.防止爲了命名污染 (封裝)
4.便於調試
5.使用方便,一次可以定義多個常量
- //聯合類型的聲明
- union Un
- {
- char c;
- int i;
- };
- //聯合變量的定義
- union Un un;
- //計算聯合變量的大小
- printf("%d\n‘,sizeof(un));
2.當最大成員的大小不是最大對齊數的整數倍的時候,就要對齊到最大對其數的整數倍