1.結構體
(1)結構體宣告
結構體可以用來給c語言增加新的資料型別,新的資料型別有多個基本型別組成的
結構體本身是一種資料型別,宣告乙個結構體不占用記憶體
使用結構體之前必須先宣告,宣告結構體使用struct關鍵字
宣告語法:
struct 結構體型別名 結構體變數;
c語言中不能再結構體中加入函式,但是可以使用函式指標
注:使用結構體型別宣告變數時需要加上struct關鍵字
(2)typedef的用法
typedef關鍵字可以給乙個已知的型別起別名
注:不能使用巨集給型別起別名
語法:
typedef 已知型別名 型別別名;
在之後的語法中,使用型別的別名就相當於原型別
typedef也可以給結構體型別起別名
語法:typedef struct 結構體型別名 結構體型別別名;
(3)匿名結構體
在宣告結構體是可以省略結構體的型別名,同時宣告乙個結構體變數,這種結構體就叫匿名結構體
匿名結構體只能使用一次
語法:struct 結構體變數;
注:使用typedef給結構體型別起別名時可以省略結構體型別名
typedef struct 結構體型別別名;
注:結構體的成員也可以是結構體
(4)結構體變數的初始化
結構體變數初始化的方法和陣列初始化的語法是一樣的
同型別的結構體變數之間可以互相賦值
通過成員運算子(.)可以訪問結構體的成員變數
語法:
結構體變數名.結構體成員變數名
結構體指標可以用來記錄結構體變數的位址,型別為 結構體型別 *
也可以通過結構體指標來訪問結構體成員變數,使用箭頭運算子(->)
語法:
結構體指標變數名->結構體成員變數名
(5)結構體作為函式形參和返回值
結構體變數可以直接作為形參使用
結構體變數也可以直接作為返回值使用
不應該使用結構體變數作為形參而應該使用結構體指標
不應該使用結構變數作為返回值而應該使用結構體指標
(6)結構體對齊
計算機儲存資料要求資料對齊,提高訪問效率
計算機記憶體中的資料的位址要求必須是自身大小的整數倍(double只需要是4的整數倍),這個規則就叫資料對齊
由於結構體是由多個成員變數組成的,成員變數本身要求對齊,這樣就會造成結構體各個成員變數之間有空隙
意味著結構體整體的大小不一定是所有成員大小之和
結構體對齊規則:
(1)第乙個成員自動對齊,可以認為結構體位址從0開始,之後所有成員的位址必須是自身大小的整數倍(double只需要是4的整數倍),如果不是就往後移動直到對齊為止
(2)整個結構體的大小是其中最大成員變數大小(double只需要是4的整數倍)的整數倍,如果不是就在結構體最後補齊
補充:
我們可以使用#pragma pack(n)預處理指令來手動指定計算機中資料對齊的方式
#pragma pack(1) //按1位元組對齊
C語言結構體的應用
c語言中另乙個重要的機制 結構體,所謂結構體就是把一些普通變數按照一定的格式組成乙個全新的變數型別,從而為其它程式所使用。而使用這個新變數型別與普通變數型別的方法 一樣。定義結構體很簡單,我們只需要為其指定乙個名稱,並在其中定義這個結構體所需要使用的屬性即可。下面是乙個函式用於計算矩形的面積面積 i...
C語言入門 結構體 檔案的應用
1 note your choice is c ide 2 include stdio.h 3 void main 416 4.讀 寫操作 核心 這裡 寫裡放任何學過的東西。只要型別對,可以存裡 17 printf 請輸入一段話 18 scanf s name 19 fprintf fp,俊哥剛才寫...
C語言結構體簡單應用範例
結構體簡單應用舉例。include struct student void main void struct student tom struct student he tom 通過指標訪問結構體及其成員 我們不能像讀寫變數一樣讀寫 student 結構體 不能直接對結構體進行比較,例如 sam t...