結構
結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。
struct tag
variable-list;//宣告定義後所定義的成員變數
//描述乙個學生
struct student
;
結構體的自引用
//結構正確的自引用方式
struct node
; //2
typedef struct node
node;
結構體內存對齊
對齊規則:
第乙個成員在與結構體變數偏移量為0的位址處。
其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。
vs中預設的值為8 linux中的預設值為4
結構體總大小為最大對齊數(每個成員變數都有乙個對齊數)的整數倍。
如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
修改預設對齊數
#pragma pack()//取消設定的預設對齊數,還原為預設
#pragma pack(1)//設定預設對齊數為1
//#pragma pack(n)設定預設對齊數為n
列舉型別的定義
enum day//星期
;
{}中的內容是列舉型別的可能取值,也叫 列舉常量 。
這些可能取值都是有值的,預設從0開始,一次遞增1,當然在定義的時候也可以賦初值。
比如上面的 thur=6
列舉的優點
增加**的可讀性和可維護性
和#define定義的識別符號比較列舉有型別檢查,更加嚴謹。
防止了命名汙染(封裝)
便於除錯
使用方便,一次可以定義多個常量
成員共用一塊空間(所以聯合也叫共用體)
//聯合型別的宣告
union un
;//聯合變數的定義
union un un;
聯合大小的計算
union un
;int islittleend()
return 1;
}int islittleend2()
return 1;
}
C語言 自定義型別 結構體 列舉 聯合
二 列舉 三 聯合 1.結構體型別建立 struct stu 定義乙個學生結構體 分號不能丟 特殊的宣告 在宣告結構的時候,可以不完全的宣告 比如 匿名結構體型別 struct x struct a 20 p p x 非法,編譯器會把上面的兩個宣告當成完全不同的兩個型別 結構的不完整宣告 struc...
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 變數列表,可以省略,建議省略...