網站首頁 編程語言 正文
1.什么是位段??
位段的聲明和結構是類似的,有兩個不同:?
①位段的成員必須是 int、unsigned int 或signed int?
②位段的成員名后邊有一個冒號和一個數字?
例如:
struct A { ? ? ? ? //4byte=32bit ? ?int 4個字節 ? ? ? ? //開辟4個字節 ? ? ? ? int _a : 2 ;//30(分配了2字節,還剩30字節) ? ? ? ? int _b : 5 ;//25 ? ? ? ? int _c : 10 ;//15 ? ? ? ? //在開辟4個字節 ? ? ? ? int _d : 30 ;//超出剩余的開辟內存大小,根據C標準可能用前面的15字節在開辟15字節 ? ? ? ? ? ? ? ? ? ? ? ? ? ? //也可能不用重新開辟30字節 };
?簡言之:位段就是規定變量占的比特位!
2.位段的內存分配、跨平臺與使用?
特別提醒:?
1. 位段的成員可以是 int unsigned int signed int 或者是 char (屬于整形家族)類型?
2. 位段的空間上是按照需要以4個字節( int )或者1個字節( char )的方式(char準確來說是int類型,反匯編內部處理為int)來開辟的
3. 位段涉及很多不確定因素,位段是不跨平臺的,注重可移植的程序應該避免使用位段(問題在于多余內存使用和開辟上)?例如:
struct S { char a:3; char b:4; char c:5; char d:4; }; struct S s = {0}; s.a = 10; s.b = 12; s.c = 3; s.d = 4;
?位段的跨平臺問題:
1. int 位段被當成有符號數還是無符號數是不確定的。?
2. 位段中最大位的數目不能確定。(16位機器最大16,32位機器最大32,寫成27,在16位機?器會出問題。?
3. 位段中的成員在內存中從左向右分配,還是從右向左分配標準尚未定義。?
4. 當一個結構包含兩個位段,第二個位段成員比較大,無法容納于第一個位段剩余的位時,是?舍棄剩余的位還是利用,這是不確確定的。?
總結:?跟結構相比,位段可以達到同樣的效果,但是可以很好的節省空間,但是有跨平臺的問題存在?
位段的應用:?
3.什么是枚舉??
枚舉顧名思義就是一一列舉。?
把可能的取值一一列舉。?
例如:
//(可能取值都是有值的,默認從0開始,一次遞增1,當然在定義的時候也可以賦初值) enum Day//星期 { Mon, Tues, Wed, Thur, Fri, Sat, Sun }; enum Sex//性別 { MALE, FEMALE, SECRET }; enum Color//顏色 { RED, GREEN, BLUE }; //以上定義的 enum Day , enum Sex , enum Color 都是枚舉類型 //{}中的內容是枚舉類型的可能取值,也叫枚舉常量 //枚舉的初始化 enum Color//顏色 { RED=1, GREEN=2, BLUE=4 };
4.枚舉的優點與使用?
我們可以使用 #define 定義常量,為什么非要使用枚舉??
枚舉的優點:?
1. 增加代碼的可讀性和可維護性
2. 和 #define 定義的標識符比較枚舉有類型檢查,更加嚴謹。
3. 防止了命名污染(封裝)
4. 便于調試
5. 使用方便,一次可以定義多個常量?
枚舉的使用:
enum Color // 顏色 { RED = 1 , GREEN = 2 , BLUE = 4 }; enum Color clr = GREEN ; // 只能拿枚舉常量給枚舉變量賦值,才不會出現類型的差異。 clr = 5; //這樣是錯誤的!
總結
原文鏈接:https://blog.csdn.net/qq_29678157/article/details/122820337
相關推薦
- 2022-11-15 Rust使用kind進行異常處理(錯誤的分類與傳遞)_相關技巧
- 2023-02-27 pandas中concatenate和combine_first的用法詳解_python
- 2024-01-06 Springboot 啟動報錯 The bean ‘xxxx‘, defined in class
- 2023-01-17 用Python實現的等差數列方式_python
- 2023-03-28 python數組如何添加整行或整列_python
- 2022-09-25 MyBatis實現多表查詢(一對一、一對多)的方式
- 2022-12-16 簡單聊聊Go語言里面的閉包_Golang
- 2022-12-14 正則表達式匹配0-10的正整數以及使用細節_正則表達式
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支