C C學習筆記 結構

2021-07-03 01:31:59 字數 3402 閱讀 3028

結構乙個多個變數的集合。這些變數可以是不同的型別。

struct 結構標記

變數表;

結構標記可選的,用於為結構命名。在定義之後,結構標記就代表花括號內的宣告,可以用它作為該宣告的簡寫形式。

變數表也是可選的。

如果結構宣告的後面不帶變數表,則不需要為他分配儲存空間,僅僅描述了乙個結構的模板或輪廓

結構體成員的引用「.」

結構名 . 成員
結構名即所宣告的表量名。

例: 

structpoint

structpointa;

a即結構名。

對成員x的引用為:

a . x

成員的初值必須是常量表示式

結構成員、結構標記、普通變數可以採用相同的名字,不會衝突。不同結構中的成員可以使用相同的名字

結構可以巢狀。
例:

structrectangle

成員的引用為:rectangle.p1.x

結構的合法操作為:

整體複製和賦值(包括向函式傳遞引數及返回值)

&運算子取位址

訪問成員

例:

structpoint makepoint( int x, int y)

注意:引數名與結構成員名重名不會衝突,還可強化之間聯絡。

structpoint* pp;
定義了乙個指標pp指向struct  

point型別。此時,*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分支的語句序列可以是乙個語句,也...