1.首先我們來認識一下什麼是結構體~
其實,結構體就是一些值的集合。我們把這些值稱為它的成員,乙個結構體的各個成員可能具有不同的型別。
結構體的形式如下:
第一種:只有結構體定義
struct 結構名
; 例如:
struct stu
;
第二種:附加該結構體型別的「結構體變數」的初始化的結構體定義
struct stu
student;
2.結構體的初始化 struct 結構體名 變數名=; 一般狀態下:無名結構體不可以定義區域性變數。(無名結構體沒有型別名)
對上述例子進行初始化:
struct stu
st1=;
3.結構體的宣告:
舉例說明:
struct x;
這個宣告建立了乙個名叫x的變數,包含了三個成員:乙個整數,乙個字元,乙個浮點數;
structy[20],*z;
這個建立了y和z。其中y是乙個陣列,包含20個結構,z是乙個指標,指向這個型別的結構。
宣告結構時也可以用typedef建立一種新的型別,例如:
typedef struct******;
4.對於上面提到的typedef大家可能還有點懵,那麼下來我們就來**一下結構體的typedef
typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。具體戳下面哦~
typedef struct student
stu;
於是在宣告變數的時候就可:stu stu1; 如果沒有typedef就必須用struct student stu1;來宣告 這裡的stu實際上就是struct student的別名。 5.結構體的訪問操作 1)直接訪問 (.) 點操作符(.),點操作符接受兩個運算元,形式為:結構變數名.訪問的成員名 2)間接訪問 —> 箭頭操作符—>,左操作符必須是乙個指向結構的指標,箭頭操作對左運算元執行間接訪問取得指標所指向的結構,然後和點操作符一樣,根據右操作符數選擇乙個指定的結構成員 6.結構體的記憶體儲存 分配三原則: 1)結構的第乙個成員永遠放在結構的0偏移處; 2)從第二個成員開始,都要對齊到某個對齊數的整數倍處; 注:對齊數:結構成員自身大小和預設對齊數的較小值 預設對齊數:vs環境下:8位 linux環境下:4位 3)結構的總大小必須是最大對齊數的整數倍。
下面舉例說明:
struct a
;
上面結構的總代小為16,具體實現見下圖:
7.記憶體對齊的原因:
(1).平台原因:不是所有的硬體平台都能訪問任意位址上的任意資料;某些硬體平台只能在某些位址處取某些特定型別的資料,否則將丟擲硬體異常。
(2).效能原因:資料結構應該盡可能的在自然邊界上對齊。為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問,而對齊的記憶體訪問僅需要一次訪問。
語言 結構體基礎知識
結構體的定義 結構體是一種構造資料型別 用途 把不 同型別的資料組合成乙個整體 自定義資料型別 1 結構體型別定義 struct 結構體名 說明 1.結構名可以省略 用無名結構體直接定義變數只能一次 2.成員型別可以是基本型或構造型 3.結構體型別定義描述結構的組織形式,不分配記憶體 例 struc...
程式設計師必須弄懂結構體,結構體基礎知識
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標誌,member list為結構體成員列表,其必須列出其所有成員 variable list為此結構體宣告的變數。struct tag variable list 在一般情況下,tag member list variable li...
c 基礎知識 六 結構體位元組對齊
我們在使用結構體的時候,有沒有發現這樣的情況,用sizeof 結構體 算出來的記憶體位元組數與結構體裡面的資料所佔記憶體位元組數總和不匹配。比如以下 struct a 本來總共應該是7個位元組 但是用sizeof 結構體 算出來卻是12個位元組今天我們來看看到底是怎麼回事呢?原來啊,是編譯器幫我們做...