結構體
1.宣告乙個結構體型別的一般形式為:
struct 結構體名 {成員表列};
如:struct [student]
([ ]表示可選項)
;注:宣告不是定義,故不可對成員列表中的成員進行初始化。
定義別名:
方法一:
如:struct [結構體名]
;typedef struct 結構體名 別名;
方法二:
如:typedef struct [結構體名]
別名 ;
2.結構體變數
定義結構體型別變數:
(1)先宣告結構體型別再定義變數名
例如:struct student student1, student2;
(2)在宣告型別的同時定義變數
這種形式的定義的一般形式為:
struct 結構體名
{成員表列;
}變數名列表;
3.結構體陣列
結構體陣列:和定義結構體一樣,
struct student
stu[3];
定義了乙個陣列stu,陣列有3個元素,均為struct student型別資料。
4.結構體指標
定義的一般形式為:
結構體型別
*p;
5.結構體成員的表現形式:
結構體變數.成員名
(*p).成員名
p->成員名
其中->稱為指向運算子。
6.結構體大小
結構體大小(位元組對齊)是最長成員的整數倍,每個成員的偏移量是其本身長度的整數倍。
對於double型別的變數,最然它是8位元組的,但是暫存器一次最大訪問4個位元組,故double型當成兩個4位元組的變數。
聯合體union
1.聯合體又稱共用體
使幾個不同的變數共占同一段記憶體的結構
稱為 「共用體」型別的結構。
定義共用體型別變數的一般形式為:
union 共用體名
{
成員表列
}變數表列;
如:union data
{ int i;
char ch;
float f;
}a,b,c;
或union data
;union data a,b,c;
2.共用體和結構體的比較:
結構體變數所佔記憶體長度是各成員佔的記憶體長度之和。每個成員分別占有其自己的記憶體單元。
共用體變數所佔的記憶體長度等於最長的成員的長度。
3.位元組順序
位元組順序是指佔記憶體多於乙個位元組型別的資料在記憶體中的存放順序,通常有小端、大端兩種位元組順序。小端位元組序指低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址處;大端位元組序是高位元組資料存放在低位址處,低位元組資料存放在高位址處。
利用聯合體可以判斷作業系統的位元組順序,**如下:
#include
union test
;int main()
else if(1 == t.a[0] && 2 == t.a[1])
else
printf("%x\n", t.val);
return 0;
}
列舉1.列舉:將變數的值一一枚舉出來,變數的值只限於列舉出來的值的範圍內。
申明列舉型別用enum
enum weekday;
預設情況下,第乙個列舉數的值為 0,後面每個列舉數的值依次遞增 1。
sun = 0, mon = 1,...... , sat = 6。
若enum weekday;
則sun = 0, mon = 1,tue = 5,wed = 6, ...... , sat = 9。
2.定義變數:
enum weekday workday,week-day;
enum{sun,mon,tue,wed,thu,fri,sat}workday;
變數值只能是sun到sat之一 。
用typedef定義型別的方法:
① 先按定義變數的方法寫出定義體(如:int i)。
② 將變數名換成新型別名(例如:將i換成count)。
③ 在最前面加typedef
(例如:typedef int count)。
④ 然後可以用新型別名去定義變數。
宣告num為整型陣列型別 : typedef int num[100];
宣告string為字元指標型別: typedef char *string;
宣告pointer為指向函式的指標型別,該函式返回整型值 : typedef int (*pointer)()
結構體 聯合體 列舉
1 結構體struct 結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們要傳送的不是簡單的位元組流 char型陣列 二是多種資料組合起來的乙個整體,其表現形式是乙個結構體。使用struct的注意事項 1 下面看乙個題目 結果 6 12 這裡涉及到結構體的記憶體對齊方式。1 關...
結構體聯合體
在c中,結構也是一種資料型別,可以使用結構變數,因此,象其它型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 struct 結構名 結構變數 結構名是結構的識別符號不是變數名。型別為第二節中所講述的五種資料型別 整型 浮點型 字元型 指標型和無值型 構成結構的每乙個型別變數稱為...
結構體,聯合體和列舉型別
一.結構體 結構體資料的存放 位段的缺點 不具有跨平台性 二.聯合體 三.列舉型別 若沒有位段 先找預設對齊數和每個數的較小值,再在這些較小值中找出最大的,即為最大對齊數.若上個對齊數開闢的空間還有冗餘可以放下下個數,就把下個數也放在這個空間內,如果不夠放下下個數,就把下個數放到下個空間內.當結構體...