新手上路系列4 復合資料型別

2021-08-04 02:07:24 字數 1365 閱讀 9237

今天就記一下復合資料型別相關的內容吧。

復合資料型別

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函式 給結構體中的指標變數成員賦值時,要先給指標分...