




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C語言自定義類型超詳細梳理之結構體枚舉聯合體//結構體自引用
//這個節點能夠找到同類型的下一個節點,這就叫結構體的自引用,我自己能找到同類型跟自己同類型的下一個元素就叫結構體的自引用。
//結構體的自引用實現:在結構體里面包含同類型的結構體的指針。
4.結構體的內存對齊
首先得掌握結構體的對齊規則:
1.第一個成員在與結構體變量偏移量為0的地址處。
2.其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。對齊數=編譯器默認的一個對齊數與該成員大小的較小值。VS中默認的值為8
3.結構體總大小為最大對齊數(每個成員變量都有一個對齊數)的整數倍。
4.如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含嵌套結構體的對齊數)的整數倍。
我們來算一下上面結構體S內存大小為什么是12個字節
我用到編譯器是vs,vs編譯器的默認對齊數是8.
1.結構體的第一個成員,放在結構體變量在內存中儲存位置的0偏移處開始。
2.從第二個成員往后的所有成員,都放在一個對齊數(成員的大小和默認對齊數的較小值)的整數的整數倍的地址處。
3.結構體的總大小是結構體的所有成員的對齊數中最大的那個對齊數的整數倍。
5.結構體位段
位段的聲明和結構是類似的,有兩個不同:
1.位段的成員必須是int、unsignedint或signedint。
2.位段的成員名后邊有一個冒號和一個數字。
假設我們用二進制的方式來表示性別,分為男、女、保密。可以用00、01、10分別表示。這樣我們連一個字節的大小都用不到,但如果我們創建變量,一個int變量就占四個字節,所以說位段在一定程度上節省了空間。
位段的內存分配
1.位段的成員可以是intunsignedintsignedint或者是char(屬于整形家族)類型
2.位段的空間上是按照需要以4個字節(int)或者1個字節(char)的方式來開辟的。
3.位段涉及很多不確定因素,位段是不跨平臺的,注重可移植的程序應該避免使用位段。
二、什么是枚舉
性別有:男、女、保密,也可以一一列舉。
月份有12個月,也可以一一列舉
這里就可以使用枚舉了。
枚舉是要創造出一種新的類型,這種類型的取值是非常有限的,明確的只有那么幾種可能取值,我們就可以用枚舉來創造一個枚舉類型
枚舉類型的大小就是4.
1.枚舉類型的定義
#includestdio.h
//聲明枚舉類型
enumColor//enum枚舉關鍵字,Color枚舉類型,
RED,//大括號里面放的是枚舉的可能取值(常量)
GREEN,
BLUE
intmain()
enumColorc=BLUE;
return0;
}
大括號里面這些可能取值都是有值的,默認從0開始,一次遞增1,當然在定義的時候也可以賦初值。
enumColor//顏色
RED=1,
GREEN=2,
BLUE=4
};
2.枚舉的優點
我們可以使用#define定義常量,為什么非要使用枚舉?
枚舉的優點:
1.增加代碼的可讀性和可維護性
2.和#define定義的標識符比較枚舉有類型檢查,更加嚴謹。
3.防止了命名污染(封裝)
4.便于調試
5.使用方便,一次可以定義多個常量
三、聯合(共用體)
1.什么是聯合(共用體)
聯合也是一種特殊的自定義類型這種類型定義的變量也包含一系列的成員,特征是這些成員公用同一塊空間(所以聯合也叫共用體)。
2.聯合(共用體)的定義
//聯合類型的聲明
unionUn
charc;
inti;
//聯合變量的定義
unionUnun;
//計算連個變量的大小
printf("%d\n",sizeof(un));
計算聯合(共用體)的大小
這里為什么算出的結果是4呢,我們看下圖:
聯合的成員是共用同一塊內存空間的,這樣一個聯合變量的大小,至少是最大成員的大小(因為聯合至少得有能力保存最大的那個成員)。
3.聯合(共用體)的初始化
#includestdio.h
unionUn
charc;
inti;
intmain()
unionUnu={10};//初始化
u.i=1000;//成員變量單獨初始化
u.c=100;
printf("%p\n",u);
printf("%p\n",(u.c));
printf("%p\n",(u.i));
return0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校黨員聯盟活動方案
- 如何分析活動方案
- 學區安保培訓活動方案
- 學校機器人比賽活動方案
- 孝道扶貧活動方案
- 婦女節公司采摘活動方案
- 婦女趣味活動方案
- 婦女采茶活動方案
- 娛樂親子互動活動方案
- 字畫征集活動方案
- 卷煙工廠MES系統技術方案
- 輥壓機培訓ppt課件
- 全國醫療服務價格項目規范(試行)
- 譯林小學英語5B教材分析
- 江蘇省常州市2024屆高一數學下學期期末質量調研試題(含解析)
- 新標準大學英語(第二版)綜合教程2 Unit 1 A篇練習答案及課文翻譯
- 冀教版英語小升初模擬試卷
- 食品用塑料包裝容器工具等制品生產許可審查細則
- 財政部金融企業不良資產批量轉讓管理辦法(財金[2012]6號)
- 物流供應商運作考評標準
- 招標投標活動異議和投訴處理工作規范
評論
0/150
提交評論