結構聯合列舉的學習筆記

2021-10-08 16:29:02 字數 1768 閱讀 1641

結構:

結構是由程式設計師自己設計一種資料型別,用於描述乙個事物的各項資料,由若干個不同的基礎型別組成。

設計:

struct 結構體名

;定義結構變數:

struct 結構名 變數名;

注意:定義結構變數時,struct不能省略。

定義結構變數初始化:

struct 結構名 變數名 = ;

要根據成員的順序初始化

struct 結構名 變數名 = ;

只初始化某個成員

注意:同型別的結構變數可以直接賦值。

訪問成員:結構變數名.成員名;

練習1、設計乙個教師結構體成員有:姓名,性別,工號,工齡,定義乙個教師結構變數,使用scanf輸入成員的值並顯示。

成員變數作形參時:

由於結構變數的位元組數都比較大,值傳遞的效率比較低,因此都傳遞結構變數的位址,如果不需要修改結構變數的值,可以使用const保護。

結構指標->成員名;

typedef重定義結構型別:

typedef struct 結構名 結構名;

之後就可以不使用struct關鍵字了。

typedef struct 結構體名

結構體名;

如何計算結構體的位元組數:

結構體成員的順序會影響它的總位元組數,在設計結構體時如果成員的順序合理可以大大節約記憶體。

記憶體對齊:

假定第乙個成員從零位址開始,儲存每個成員位址編號必須能被它的位元組數整除,如果不能整除則填充空位元組。

記憶體補齊:

結構體的總位元組數,必須是它最大成員的整數倍,如果不是則在末尾填充空位元組。

在linux系統下計算結構體的對齊和補齊時如果成員的位元組數超過4位元組則按4位元組計算,window系統按實際情況計算。

#pragma pack(n) 設定補齊、對齊時的最大位元組數,n <= 預設。

位域:typedef struct 結構體名

結構體名;

聯合:

聯合與結構的使用方法基本一致,與結構的區別是所有成員共用一塊記憶體,乙個成員的值改變,其它成員的值也會隨之變化。

聯合就是用少量的記憶體對應多個識別符號,來達到節約記憶體的目的,現在已經基本不再使用。

聯合常考的筆試題:

union data(0a~0d)

;注意:計算聯合體的時候要考慮記憶體補齊。

如何判斷系統的大小端?

假如果十六進製制整數0x01020304儲存在以0x0a為起始的4位元組記憶體中,

高位資料儲存在高位位址(0a:04 0b:03 0c:02 0d:01) 小端。

高位資料儲存在低位位址(0a:01 0b:02 0c:03 0d:04) 大端。

個人計算機系統一般都是小端系統,而unix伺服器和網路裝置都是大端,網路位元組序也就是大端模式的資料。

序列化和反序列化。

列舉:

列舉就是把一種資料型別可以能出的值全部羅列出來,取乙個有意義的名字,除此以該型別的變數再等於其它值就是非法的(願望)。

列舉可以看作是值受限的int型別,但編譯器為了效率並不檢查,所有在c語言列舉可以當作int型別變數使用。

enum direction

;enum direction n = up|down|right|left;

列舉常量的值預設從0開始,逐漸加1,如果某個設定的值,後面的在它的基礎上逐漸加1。

為什麼使用列舉:

為無意義的值取乙個有意義的名字,提高**可讀性,和安全性(它比巨集常量要安全)。

學習筆記17 C語言 結構 聯合 列舉

結構是由程式猿自己設計的一種資料型別,用於描述乙個事務的各項資料,由若干個不同的基礎資料型別組成。設計結構 struct 結構體名 定義結構體變數 struct 結構體名 變數名 注意 定義結構變數時,struct不能省略 定義並初始化結構變數 struct 結構體名 變數名 根據成員的順序進行初始...

結構,聯合和列舉

結構 結構的宣告格式如下 struct id 別忘了右花括號後面的分號 1.和陣列類似的是,結構變數可在定義時初始化,如 struct id tae 同樣的,這種初始化只能在定義時進行。若在定義之後的地方進行,編譯器會報錯 但可用匿名結構進行快速賦值,如 struct id tae tae 錯誤 t...

結構體,列舉,聯合

結構體 1.結構體的建立 1 在構建結構體之前,必須要對結構體進行宣告。例 struct student 描述乙個學生,student為標籤 此處的分號不能丟,此處也可寫變數 2 成員訪問 2.1在 1 中的 struct student 相當於型別,比如 int型,struct student s...