11.26
1.struct 結構體名 結構體成員
;最後的「;」不能省!
也可指定乙個無名的結構體型別,他不出現結構體名。
2.結構體變數的初始化和引用。
struct 結構體名 結構體成員
成員=:
也可成員.成員列表= ;
*3.*只能對最低一級的成員進行賦值運算。
struct studentstu;
struct birthday
bir;
stu.bir.year= ;
*4.*結構體變數可以像普通變數一樣進行各種運算。
11.27
1.結構體陣列
struct 結構體名
陣列名[陣列長度] ;
如果先定義了乙個結構體,這可以直接這樣:
結構體型別 陣列名[陣列長度] ;
使用時和普通陣列區別不大;
2.結構體指標:
struct 結構體名 *p;
p代表了第乙個元素;
可通過指標來指向結構體成員。如:
(*p).成員名;
p->成員名;
指向結構體陣列的指標:
結構體陣列的指標的初值為第乙個元素的第乙個成員的位址。
3.可用結構體變數和結構體指標變數作為函式引數。
如:#include#includestruct student ; //void print(struct student); void print(strut student *p); int main() void print(struct student *p) //void print(struct student stu) }
11.29
鍊錶:先定義乙個結構體,結構體中必須有乙個結構體變數的指標。這個結構體變數的指標指向下乙個結構體。
建立動態鍊錶的ns圖
輸出動態鍊錶的ns圖
11.30
共用體型別:
union 共用體名
變數列表;
當想根據不同情況,在同乙個起始位址位置輸入不同的資料型別時,
可以用共用體變數來實現。
共用體變數不能被使用,只能呼叫共用體變數的成員。
共用體的使用:
struct 結構體名
變數列表;
}變數列表;
注意:(1)。同乙個記憶體段可以用來存放幾種不同型別的成員,但每一瞬時只能存放其中乙個成員。
(2)。共用體中起作用的成員是最後一次被賦值的成員。
列舉型別:
enum[列舉型別] ;
列舉元素按常量處理,故稱列舉常量。
用 typedef 宣告新型別名。
如: typedef int integer
integer 就代表了int
於是 int a也就相當於 integer a
也可以用typedef struct date;
於是可以這樣定義結構體指標:
date *a
結構體與共用體小結
一,結構體的概念和定義 1,結構體的定義 struct 結構體名 這裡資料型別可以是復合型別,例如又是乙個結構體型別,即巢狀 2,結構體變數的定義 struct 結構體名 變數名1,變數名2,變數名n 或 struct 結構體名 結構體變數1,結構體變數2 或 struct 結構體變數1,結構體變數...
結構體的大小 結構體對齊問題
c語言中,基本資料型別與作業系統有關 雖然直接與編譯器相關 基本沒有什麼變化。比如在32位作業系統中,int佔4個位元組,long佔4個位元組,char佔1個位元組,double佔8個位元組。但是結構體的大小並不只與作業系統有關了,與編譯器有比較大的關係。不同的編譯器有不同的對齊方式,下面以32為l...
結構體位元組對齊小結
1.位元組對齊的原因 一些平台對某些特定型別的資料,只能從特定位址開始訪問。如有些訪問是從偶位址開始,假設int 32位 的資料存在偶位址開始,則只需要乙個週期就能拿到。但如果在奇位址開始,則除了要用2個週期讀取外,還要對高低位址進行拼湊才能得到正確的資料。顯然這是低效的。2.一般編譯器在編譯程式時...