c語言複習 結構體和共用體

2021-09-02 07:59:03 字數 2595 閱讀 5801

注:本文是對蘇小紅版c語言程式設計第12章的筆記

結構體的定義

結構體的宣告(主要目的:用已有的資料型別定義乙個新的資料型別):

struct 結構體名//結構體名成為結構體標籤

e.g.:

struct student

;

注意,結構體模板只是宣告了一種資料型別,並未宣告結構體型別的變數

結構體變數的定義:

方法一:

struct student

;struct student stu1;

方法二:

struct student//此時結構體標記可以不填

stu1;

用typedef定義資料型別

e.g.:

typedef struct student student;

typedef struct student

student;

則 struct student sut1; 和 student stu1等價

訪問結構體的成員必須使用成員選擇運算子

結構體變數名.成員名
e.g.:stu1.name

在函式體外部宣告的結構體型別可為所有函式使用

在函式體內宣告的結構體型別只能在本函式體內使用

結構體型別所佔記憶體的位元組數並非所有成員所佔記憶體位元組數的總和(存在補位)(機器相關)

結構體陣列的初始化

e.g.:

student [3] =    

}

結構體指標student*pt = &stu1

指向運算子:指向結構體的指標變數名 -> 成員名

e.g.:pt -> name = "amy"(*pt).name = "amy"等價(但後者不常用)

向函式傳遞結構體:

向函式傳遞結構體的單個成員(不常用)或結構體的完整結構(時空開銷大):在函式內對形參結構體成員值的修改不會影響相應是慘結構體成員的值

用結構體指標或結構體陣列作函式引數(效率更高):函式內部對形參結構體成員值的修改影響實參結構體成員的值

共用體:宣告方式與結構體類似,只是將關鍵字換為union

共用體型別所佔的記憶體空間的大小取決於其成員中佔記憶體空間最多的那個成員變數。

共用體採用覆蓋技術來實現記憶體的共用,只能對乙個成員進行初始化(每一瞬時起作用的成員就是最後一次被賦值的成員)

e.g.:

#include typedef union studentstudent;

int main()

輸出結果為:f7070f(共用體的值相同)

列舉型別

定義:

enum response;//response成為列舉標籤

enum response answer;

也可以寫成

enum response answer;//列舉標籤response可以省略
c語言允許在列舉型別定義是明確地制定每乙個列舉常量的值,如:

enum resonse;

enum week;

注意,列舉標籤後面花括號內的識別符號代表列舉型別的可能取值,其值時整型常數,不是字串。

節點:資料域:儲存資料

指標域:和節點型別一致的指標變數

動態鍊錶的生成:

用malloc動態申請記憶體

頭節點指向第乙個節點

prept永遠指向當前的尾節點

e.g.;

#include #include typedef struct student student;

student* build(int n);

int main()

student* build(int n)else

for(int i = 1; i < n; i ++)else

}prept -> next = null;//尾指標指向null

return head;

}

查詢節點

pr儲存當前節點

e.g.:

student* findlast( student *head)

return pr;

}student* findn(student *head, int n)

return pt;//返回所求或null

}

插入節點

student*inserttotail(student*head, student *new)

student* insert(student* head, student* new, int n)else

return head;

}

C語言複習(3) 結構體共用體

結構體的主要問題在於,結構體的大小,因為結構體需要記憶體對齊 共用體的主要問題在於,共用體 共用低位址,所以共用體的大小取決於最大的的元素位元組數 一 結構體大小的計算 struct a 本來應該是1 4 5,對齊之後是char 1位元組 int 4位元組 是需要補齊三位元組,以保證struct的位...

C 結構體共用體

12 c 中陣列初始化的特點 初始話陣列可以省略等號 初始話內容為空 不可縮窄操作 double people double people int number 不通過,因為浮點到整形為縮窄13 sizeof 計算陣列時候會比strlen 多計算乙個0位元組 14 字串的初始化和賦值,string ...

共用體和結構體

共用體和結構體的宣告與初始化的格式不同。宣告 struct or union new st 初始化 new st 和陣列一樣,使用逗號分隔,並用花括號括起。也可以全放在一行。可以同時完成定義結構和建立結構變數的工作,只需要將變數名放在結束括號的後面 struct or union new st ne...