復合資料型別

2021-07-22 21:21:47 字數 1629 閱讀 5279

結構體

作用:封裝資料(把多種不同的資料型別放在一起)

注意:一般放在全域性;分號不能省略。

結構體變數用點訪問

結構體指標用->訪問

初始化:

靜態初始化

動態初始化

使用注意事項:

給結構體中的陣列成員賦值時,不能直接將字串賦給陣列名,可以使用strcpy函式

給結構體中的指標變數成員賦值時,要先給指標分配空間,否則它會使乙個野指標

靜態初始化即在定義的時候直接賦值

結構體陣列的初始化:使用for迴圈來完成

結構體中的對齊方式:

字對齊和半字對齊

字對齊:給每個變數先分配四個位元組的空間,如果下乙個資料的資料型別與之相同,就可以放在一起,如果空間不夠就再開闢四個位元組的空間;如果型別不相同,就直接開闢四個位元組的空間

半字對齊:原理和字對齊大致相同,但是分配的空間為2個位元組

特別的:

char

short   :8位元組

char

char

char    :4位元組

short

記憶體空洞:由於字對齊和半字對齊造成的記憶體浪費

解決方法:在定義結構體的時候,盡量將相同型別的資料放在一起

共用體

和結構體的區別:

1.共用體的大小是其中最長的資料型別的長度,共用體中所有的成員共用同一段記憶體空間,但是其也滿足字對齊和半字對齊

2.共用體共用同一段空間,造成資料覆蓋

123

4567

8910

#include 

union 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的屬性,與作業系統無關):

小端位元組:低位元組存放在低位址,高位元組存放在高位址

大端位元組:高位元組存放在低位址,低位元組存放在高位址

無論大端位元組還是小端位元組,都是從低位元組開始存放的

具體程式:

123

4567

891011

1213

1415

1617

1819

2021

union node

int 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...