結構是乙個或多個變數的集合。這些變數可以是不同的型別。
struct 結構標記
變數表;
結構標記是可選的,用於為結構命名。在定義之後,結構標記就代表花括號內的宣告,可以用它作為該宣告的簡寫形式。
變數表也是可選的。
如果結構宣告的後面不帶變數表,則不需要為他分配儲存空間,僅僅描述了乙個結構的模板或輪廓。
結構體成員的引用「.」
結構名即所宣告的表量名。結構名 . 成員
例:
structpoint
structpointa;
a即結構名。
對成員x的引用為:
a . x
成員的初值必須是常量表示式。
結構成員、結構標記、普通變數可以採用相同的名字,不會衝突。不同結構中的成員可以使用相同的名字。
結構可以巢狀。
例:
structrectangle
成員的引用為:rectangle.p1.x
結構的合法操作為:整體複製和賦值(包括向函式傳遞引數及返回值)
&運算子取位址
訪問成員
例:
structpoint makepoint( int x, int y)
注意:引數名與結構成員名重名不會衝突,還可強化之間聯絡。
structpoint* pp;
定義了乙個指標pp指向structpoint型別。此時,*pp即為該結構整體。
成員引用形式為:
(* pp).x或者pp -> x
structpoint
point_array[5];
point_array[5]即為結構陣列。
結構的長度不是簡單的各成員長度的和。不同的物件有不同的對齊要求,所以結構中會出現未命名的「空穴(hole)」。
例:
struct
int佔4位元組,char佔1位元組。最後整個結構體可能是8個位元組。
注意:指標的長度由cpu決定,不取決於所指向的型別。
乙個結構內不能包含自身,但是可以包含指向自身的指標。
例:
structtnode
typedef 型別名 自定義型別名例:
typedefinta;a a;宣告乙個int型變數a。
typedef int*b;b b;宣告乙個指向int型的指標b。
typedef structpoint c;c c;宣告乙個結構變數c。
typedef structpoint*d;d d;宣告乙個指向結構的指標d。
union 聯合標記
聯合名;
乙個變數可以合法地儲存多種資料型別中任一種型別的物件。這些型別中的任一種型別的物件都可賦值給
聯合名,且可在後續表示式中使用,但必須保持一致。
提供一種方式,可以在單塊儲存區中管理不同型別的資料。所有成員相對於基位址的偏移量都為0。
例:
unionu_tag
var;
var可以是int、float、char*型。而不像int var一樣,只是int型。
訪問方式同結構。
聯合可以使用在結構和陣列中,反之亦可。
struct
變數名;
寬度為二進位制位數;
型別名只能為unsigned
int、int、signed int。
定義的字段最多
2 bytes,即
1 word。可以有無名字段(只有冒號和寬度),起到填充的作用。
欄位的分配是看具體機器,有些從左至右,有些從右至左。
字段不能使用&取址符。其引用同結構。
例:
struct
tag;
定義了乙個變數tag,包含 3 個 1 bit 的字段。
位欄位不能跨機器字儲存,如果上乙個機器字空間不足,將全部存到下乙個機器字。
C C學習筆記
1.儲存型別 標準c語言為變數 常量 函式定義了4種儲存型別 extern,auto,static,register,它們分別用乙個關鍵字 儲存型別說明符 來說明。這4種儲存型別可分為兩種生存期限 永久的 即整個程式執行期間都存在 extern和static 和臨時的 即暫時儲存在堆疊和暫存器中 a...
C,C 學習筆記
1.求a的n次方 標頭檔案pow a,n a,n都為double 2.關於指標的一些小測試 includeusing namespace std int main int a 8 int m 3 cout 3.sort位於 algorithm 中,sort p,p n 預設公升序排列。4.inclu...
C C 學習 選擇結構
if 表示式 語句1 if 表示式 語句1 else 語句2 注意 1 if語句的表示式一般為關係 邏輯運算表示式,但也可以為其他表示式,但按邏輯值來理解 a 5,b 2 if a x a 10 等價於a 0 switch 表示式 注意 1 switch語句中case分支的語句序列可以是乙個語句,也...