今天就記一下復合資料型別相關的內容吧。
復合資料型別
1、struct:
1、)struct是乙個用來宣告結構體型別的關鍵字,它只是起到乙個宣告的作用,所以記憶體並沒有為它分配空間。變數定義時有多種不同的方式,比如以下幾種:
(1)struct student stu; 定義了乙個student結構體變數,變數名為stu。
(2)struct studen t1,t2 ; 直接在結構體宣告時定義。
(3)上述第二種定義方式可以不加結構型別的名字,在宣告時直接定義變數。但這樣的定義方式使得該結構體不能再被使用(因為它連名字都沒有)。
2、)對於struct的初始化與使用:可以直接在內部對其逐個賦初值。也可以用"."這個符號加上需要對其初始化的變數,使用的時候同樣只需要加上"."操作符。這裡需要提到另外 乙個比較重要的知識點,對char name這個變數進行操作時,不能對其直接賦值,它是乙個字元陣列,可以使用strcpy這個函式進行賦值操作。
3、)結構體的記憶體對齊模式:資料項只能儲存在位址是資料項大小的整數倍的記憶體位置上,例如int型,只能在0,4,8這樣的位置上。不過系統有它自己的預設對齊係數。win下是8個位元組,linux下有的是4個位元組,有的還是8個位元組。這樣的對齊方式雖然有些浪費記憶體,但對於讀取效率確實提公升了不少。但有的時候並不需要占用乙個完整的位元組,這時候,我們就可以指定某個成員所占用的二進位制位數,這就是位域。位域主要分為2大類,第一種:當相鄰成員的型別相同時,後乙個成員會緊鄰前乙個成員儲存,但如果它的位寬之和大於型別的sizeof大小,那麼後面的成員將從新的儲存單元開始,其偏移量是型別大小的整數倍;當相鄰成員型別不同時,看編譯器,不同編譯器會有不同的實現方案。
4、)結構體指標:struct student *pstu = &stu; 結構體指標,指向乙個結構體變數stu。呼叫該型別的指標需要乙個新的運算子"->",如pstu->name。
2、enum:
列舉列表中的識別符號的作用範圍是全域性的,不能再定義與它們名字相同的變數。且內部的都是常量,不能對其賦值。其值如果不初始化的話,第乙個為0,依次加1,
3、union:
共用體的用法和結構體類似,但結構體的各個成員有著各自不同的記憶體,互相沒有影響;而共用體的所有成員占用同一塊記憶體,修改乙個成員互影響其他成員,但所有的成員的起始位址都是一樣的。
這裡會提到乙個有關大端小端模式的概念,如下,大端模式:字資料的高位元組儲存在低位址中,而字資料的低位元組則存放在高位址中。小端模式:字資料的高位元組儲存在高位址中,而字資料的低位元組則存放在低位址中。因為共用體的起始位址都是一樣的,這裡可以利用共用體來判斷大小端模式,方法如下:
int checklittleendian()
return 0;
}
復合資料型別
復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用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...
復合資料型別
結構體 作用 封裝資料 把多種不同的資料型別放在一起 注意 一般放在全域性 分號不能省略。結構體變數用點訪問 結構體指標用 訪問 初始化 靜態初始化 動態初始化 使用注意事項 給結構體中的陣列成員賦值時,不能直接將字串賦給陣列名,可以使用strcpy函式 給結構體中的指標變數成員賦值時,要先給指標分...