文章目錄
- 1.位段
- 1.1位段的宣告
- 1.2為什么要有位段
- 1.3位段的存盤形式
- 1.4位段的缺點
- 1.5知識點補充
- 2.列舉
- 2.1列舉的宣告
- 2.2列舉的使用
- 2.3列舉的優點
- 3.聯合
- 3.1聯合的定義
- 3.2聯合的特點
- 3.3實戰演練
- 3.3.1公用空間證明
- 3.3.2利用聯合的特性判定大小端
- 3.3.3記憶體對齊證明
1.位段
1.1位段的宣告
1.位段的成員必須是 int, unsigned int , signed 即必須是整形家族;
這是因為位段的成員是以位元位為單位進行存盤的,假如是浮點型別,給成員一個5.3的容量,0.3的位元位去哪里找呢?
2.位段的成員名后面有一個冒號和數字
3.具體宣告如下:

1.2為什么要有位段
1.平時我們開辟空間都是偶數位元位,用來存盤奇數就會造成一定的空間浪費,當這種資料特別多的時候,浪費的空間就會非常龐大,此時我們用位段來進行存盤,就可以有效的利用空間,將奇數位段打包在一起;
2.用位段可以很方便的訪問一個整形的部分內容
1.3位段的存盤形式
以上述定義的位段A為例

接下來一起看看在計算機中的解釋吧

1.4位段的缺點
由1.2可知我們知道了位段的優點,接下來介紹一下位段的缺點;
位段的可移植是非常差的,主要數由一下幾點的原因導致:
1.整形有無符號不確定,有可能你的計算機int是有符號的,其他人的計算機是無符號的;
2.平臺的不同,最大位元組數可能不同,比如你的是32位計算機,別人的是16位,那么你給一個變數20個位元位的空間移植過去就會發生錯誤;
3.存盤的方向不同,比如你的是從左至右存盤,別人的是從右至左存盤;
4.當存盤一個成員之后,剩余的空間不足以容納下一個成員,那么下一個成員是將剩余的空間補滿再開辟新的空間,還是全部存盤到新的空間里面也是不確定的;
以上四點導致了位段的可移植性非常差;
1.5知識點補充
1.位段的所有型別都一樣不需要記憶體對齊;
2.位段是一種資料結構存盤的壓縮方案,只考慮空間不考慮效率
2.列舉
2.1列舉的宣告

2.2列舉的使用
列舉的特性:
1.列舉常量的取值是從0開始的,往下依次遞增,當然我們也可以在定義的時候進行賦值;
2.列舉是一種型別,占4個位元組;
3.列舉的運用如下圖所示:

2.3列舉的優點
我們知道 #define也可以定義常量,那么為什么要用列舉呢?這是因為它有如下幾個優點;
1.增加代碼的可讀性和維護性
2.#define只是進行替換而不會進行檢查,列舉有型別的檢查更加的嚴謹
3.防止了命名的污染
4.方便除錯
5.使用方便,可以一次定義多個常量
3.聯合
3.1聯合的定義

3.2聯合的特點
1.聯合的成員公用一塊記憶體空間,因此聯合變數的大小最少是最大成員的大小
2.聯合需要進行記憶體對齊,對齊到最大對齊數的整數倍
3.聯合成員都是從最低處開始讀取資料
3.3實戰演練
3.3.1公用空間證明


3.3.2利用聯合的特性判定大小端

3.3.3記憶體對齊證明

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243578.html
標籤:其他
上一篇:年終總結(不是,瞎寫的)
下一篇:再見 2020 !—— 年度總結
