結構體
作用:封裝資料(把多種不同的資料型別放在一起)
注意:一般放在全域性;分號不能省略。
結構體變數用點訪問
結構體指標用->訪問
初始化:
靜態初始化
動態初始化
使用注意事項:
給結構體中的陣列成員賦值時,不能直接將字串賦給陣列名,可以使用strcpy函式
給結構體中的指標變數成員賦值時,要先給指標分配空間,否則它會使乙個野指標
靜態初始化即在定義的時候直接賦值
結構體陣列的初始化:使用for迴圈來完成
結構體中的對齊方式:
字對齊和半字對齊
字對齊:給每個變數先分配四個位元組的空間,如果下乙個資料的資料型別與之相同,就可以放在一起,如果空間不夠就再開闢四個位元組的空間;如果型別不相同,就直接開闢四個位元組的空間
半字對齊:原理和字對齊大致相同,但是分配的空間為2個位元組
特別的:
char
short :8位元組
char
char
char :4位元組
short
記憶體空洞:由於字對齊和半字對齊造成的記憶體浪費
解決方法:在定義結構體的時候,盡量將相同型別的資料放在一起
共用體
和結構體的區別:
1.共用體的大小是其中最長的資料型別的長度,共用體中所有的成員共用同一段記憶體空間,但是其也滿足字對齊和半字對齊
2.共用體共用同一段空間,造成資料覆蓋
1234567
8910
#includeunion stu
;
union stu p;
p.num = 1;
p.ch = 'a';
printf("p.num = %d\n",p.num);
來自code的**片
snippet_file_0.txt
執行結果:p.num = 97(後面賦值的ch覆蓋了num,即輸出了』a』的ascii碼值)
運用:一般使用共用體來驗證cpu的大小端(
大端位元組序和小段位元組
序是cpu的屬性,與作業系統無關):
小端位元組:低位元組存放在低位址,高位元組存放在高位址
大端位元組:高位元組存放在低位址,低位元組存放在高位址
無論大端位元組還是小端位元組,都是從低位元組開始存放的
具體程式:
1234567
891011
1213
1415
1617
1819
2021
union nodeint main()
else
return 0;
}
來自code的**片
snippet_file_0.txt
列舉
只能代替整數巨集
作用:避免幻數,提高**可讀性
復合資料型別
復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用stu.id stu.name 初始化的方式 在對陣列進行初始化時 strcpy stu.name,zhangsan 在對指標進行初始化時 char name 對name進行初始化 stu.name...
復合資料型別
一 struct結構體 封裝資料 存放多種不同的資料型別 struct的宣告放在全域性區 1.宣告和定義 宣告 struct student struct student stu array 3 int i for i 0 i 3 i for i 0 i 3 i include struct stu...
復合資料型別
include 結構體 struct student1 s4 無名結構體 struct s2,s3 int main 使用,變數用 引用成員,指標用 引用成員 printf id d,name s n s5.id,s5.name struct student1 ps s4 s4.id 20 prin...