学习笔记17-C语言-结构、联合、枚举
生活随笔
收集整理的這篇文章主要介紹了
学习笔记17-C语言-结构、联合、枚举
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
結(jié)構(gòu): struct
結(jié)構(gòu)是由程序猿自己設計的一種數(shù)據(jù)類型,用于描述一個事務的各項數(shù)據(jù),由若干個不同的基礎數(shù)據(jù)類型組成。設計結(jié)構(gòu):struct 結(jié)構(gòu)體名{類型 成員名;...};定義結(jié)構(gòu)體變量struct 結(jié)構(gòu)體名 變量名;注意:定義結(jié)構(gòu)變量時,struct不能省略定義并初始化結(jié)構(gòu)變量 struct 結(jié)構(gòu)體名 變量名 = {v1,v2,v3,...}; 根據(jù)成員的順序進行初始化 也可以 struct 結(jié)構(gòu)體名 變量名 = {.成員名= ,.成員名= ,.成員名= ,...} 只初始化某些成員 同類型的結(jié)構(gòu)變量可以直接賦值訪問成員:變量名.成員名;結(jié)構(gòu)指針->成員名; 結(jié)構(gòu)體變量作為形參時:由于結(jié)構(gòu)變量的字節(jié)數(shù)都比較大,值傳遞效率比較低,因此都傳遞結(jié)構(gòu)體變量的地址如果不需要修改結(jié)構(gòu)變量的值,可以用const保護 typedef 重定義結(jié)構(gòu)類型:typedef struct 結(jié)構(gòu)名 結(jié)構(gòu)名;之后就可以不用加struct關鍵字typedef struct 結(jié)構(gòu)體名{...}結(jié)構(gòu)體名;注意:結(jié)構(gòu)體變量一般存儲在堆內(nèi)存計算結(jié)構(gòu)體的字節(jié)數(shù)結(jié)構(gòu)體成員的順序會影響它的總字節(jié)數(shù)大小,在設計結(jié)構(gòu)體時,如果順序合理能夠大大節(jié)約內(nèi)存。內(nèi)存對齊:假設第一個成員從零地址開始,存儲每個成員的地址編號必須能被比它的字節(jié)數(shù)整除,如果不能會填充空字節(jié)內(nèi)存補齊:結(jié)構(gòu)體的總字節(jié)數(shù),必須是它最大成員字節(jié)數(shù)的整數(shù)倍,如果不是則在末尾填充空字節(jié)注意:在Linux系統(tǒng)下計算結(jié)構(gòu)體的對齊、補齊時,如果成員的字節(jié)數(shù)超過4,則按照4字節(jié)計算在windows系統(tǒng),則按照實際情況計算#pragma pack(n) 設置對齊、補齊的最大字節(jié)數(shù) n<=默認Linux:1、2、4...聯(lián)合: union
聯(lián)合與結(jié)構(gòu)的使用方法基本一致,與結(jié)構(gòu)的區(qū)別是所有成員共用的一塊內(nèi)存,如果一個成員的值發(fā)生改變,其他成員的值也會隨之發(fā)生改變 聯(lián)合就是用少量的內(nèi)存對應多個標識符,從而達到節(jié)約內(nèi)存的目的,現(xiàn)在基本上不再使用。 ??嫉墓P試題: union Date {char ch[10];int num; } 12 注意:聯(lián)合天然對齊,但計算聯(lián)合的字節(jié)數(shù)時要考慮內(nèi)存補齊如何判斷系統(tǒng)是大端系統(tǒng)還是小端系統(tǒng)?假如十六進制整數(shù)0x01020304存儲在以0x0A為起始的4字節(jié)內(nèi)存中:小端:高位數(shù)據(jù)存儲在高位地址中(0A:04 0B:03 0C:02 0D:01)大端:高位數(shù)據(jù)存儲在低位地址中(0A:01 0B:02 0C:03 0D:04)個人計算機系統(tǒng)一般都是小端系統(tǒng),UNIX服務器和網(wǎng)絡設備都是大端,網(wǎng)絡字節(jié)序也是大端模式的數(shù)據(jù)序列化和反序列化枚舉: enum
枚舉就是一種數(shù)據(jù)類型,把所有可能出現(xiàn)的值列出來,可以取一個有意義的名字,除此之外,該類型的變量在等于其他值都是非法的(愿望)enum 枚舉名{枚舉常量1,枚舉常量2,...};枚舉就可以看作是一種類型受限的int類型,但是編譯器為了效率并不會檢查數(shù)據(jù)的值,所以在C語言中枚舉可以當作int類型使用enum Dirextion{UP=183,DOWN,LEFT,RIGHT}; 如果不給成員值,枚舉常量的值默認從0開始,逐漸加1,如果某個設置了值,后面的在它的基礎上加1為什么要用枚舉:為無意義的數(shù)據(jù)取一個有意義的名字,提高代碼的可讀性和安全性(比宏常量安全)總結(jié)
以上是生活随笔為你收集整理的学习笔记17-C语言-结构、联合、枚举的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广发信用卡消费延期利息多少?带你来算一笔
- 下一篇: 根据中序、前序遍历重建二叉树