【C++】學習筆記八——共用體
共用體
共用體是一種資料格式,它能夠儲存不同的資料型別,但在同一時間只能儲存其中的一種型別。共用體的用途之一是,當資料使用兩種或更多種格式,但不會同時使用這些格式時,可以節省空間。
union one4all
{
int int_val;
long long_val;
double double_val;
};
可以使用one4all變數來儲存int、long、double,條件是在不同的時間進行:
one4all pail;
pail.int_val = 15;
cout << pail.int_val;
pail.double_val = 1.38 ;
cout << pail.double_val;
pail有時可以是int變數,有時又可以是double變數。
由於共用體每次只能儲存一個值,因此他必須有足夠的空間來儲存最大的成員,所以,共用體的長度為其最大成員的長度。
假設管理一個小商品目錄,其中有一些商品的ID為整數,而另一些ID為字串,可以這樣做:
struct widget
{
char brand[20];
int type;
union id
{
long id_num;
char id_char[20];
} id_val;
};
...
widget prize;
...
if (prize.type == 1)
cin >> prize.id_val.id_num;
else
cin >> prize.id_val.id_char;
匿名共用體(anonymous union)沒有名稱,其成員將成為位於相同地址處的變數。顯然,每次只有一個成員是當前成員:
struct widget
{
char brand[20];
int type;
union
{
long id_num;
char id_char[20];
};
};
...
widget prize;
...
if (prize.type == 1)
cin >> prize.id_num;
else
cin >> prize.id_char;
此時由於共用體是匿名的,因此id_num和id_char被視為prize的兩個成員,他們的地址相同,所以不需要中間識別符號id_val。
共用體常用於(但並非只能用於)節省記憶體。
相關推薦
【C++】學習筆記八——共用體
共用體 共用體是一種資料格式,它能夠儲存不同的資料型別,但在同一時間只能儲存其中的一種型別。共用體的用途之一是,當資料使用兩種或更多種格式,但不會同時使用這些格式時,可以節省空間。 union one4all { int int_val;
【C++】學習筆記二十七——讀取數字的迴圈
假設要將一系列數字讀入到陣列中,並允許使用者在陣列填滿之前結束輸入。一種方法是利用cin: int n; cin >> n; 如果使用者輸入一個單詞而不是數字,將發生: n的值保持不變; 不匹配的輸入將被保留在輸入佇列中; cin
【C++】學習筆記十三——陣列的替代品
陣列的替代品 陣列的替代品有模板類vector和array。 1. 模板類vector 模板類vector類似於string類,也是一種動態陣列。 可以在執行階段設定vector物件的長度,可在末尾附加新資料,還可在中間插入新資料。 vector是
【C++】學習筆記草稿版系列11(運算子過載)
運算子過載和友元之間是如何發生關係的 友元過載,成員過載 單目和雙目運算子可以過載 通常情況下: 雙目運算子過載為成員的話需要一個引數,過載為友元的話需要兩個引數 const Comple
【C++11學習筆記】返回型別後置語法
本次學習3個知識點: (1)auto推導型別 (2)decltype推導表示式的型別 (3)返回型別後置語法 泛型程式設計中經常遇到的寫一個加法函式: template <typename R, typename T, typename U>
【C語言學習筆記】printf,%n格式控制符中的異類?
printf的作用毫無疑問應該是用來輸出。但是其中卻出現了%n這個向記憶體寫入而不是輸出字元的控制符。 %n的功能實現原理,是有別於其他控制符,還是本質上和別的控制符相同,只是操作物件有區別。這有待進一步學習。 初步思考: 憑過去對組合語言的簡單瞭解,在螢幕上輸出的每一個字
【C++11學習筆記】型別判斷的type_traits學習
一、簡單的type_traits 我理解的type_traits是利用C++模板特性和static、enum特性定義編譯器常量,例如 //std::integral_constant原始碼 typelate<class T, T v> str
【Python】學習筆記十三:函數的參數對應
color 筆記 屏幕 *args borde 基於 但是 all small 位置傳遞 我們在定義函數時候已經對函數進行了參數傳遞調用,但是那只是粗淺的位置傳遞 示例 def sum(a,b,c): d = a+b+c return d p
【Python】學習筆記4-內置函數
打印數字 筆記 轉換 查看 判斷 lis clas 函數 ted 1、內置函數 1 print(all([1,2,3,0])) #判斷可叠代對象裏面是否都為真:非零即真非空即真原則 2 print(any([1,2,3,0])) #判斷可叠代對象裏面是否有一個為真:非
【Python】學習筆記4-time、md5、加密base64模塊
數據庫 sta 自己的 pri 時間 decode 不可 字符 ftime 1、time # 1、格式化好的時間 2018-1-14 16:42# 2、時間戳 是從unix元年到現在所有的秒數# 3、時間元組# 想時間戳和格式化好的時間互相轉換的話,都要先轉成時間元組,然後
【Python】學習筆記4-os、sys模塊
etc 創建 記錄 body spa platform pri eas usr 1、os操作系統模塊 1 import os 2 print(os.getcwd()) #獲取當前工作目錄 3 # print(os.chdir("..")) #更改當前目錄.當前目錄
【Python】學習筆記5-操作mysql數據庫pymysql
rod bsp phone utf8 charset delet 建立 包含 hone import pymysql#其他數據庫,比如oracle 模塊是pyoracle#1、鏈接數據庫mysq ip 端口號 密碼 賬戶 數據庫#2、建立遊標#3、執行sql#4、獲取結果#
【Python】學習筆記5-利用flask來mock接口
入口 輸出 端口號 delet app file log asc conf # 1、mock接口# import flask #python的輕量級的開發框架# # 接口,後臺服務的開發# # 在瀏覽器運行http://127.0.0.1:8080/get_user即可,或
【python】學習筆記10-ddt數據驅動
get args code imp content coo 文檔 AR ems DDT的使用 DDT包含類的裝飾器ddt和兩個方法裝飾器data(直接輸入測試數據),file_data(可以從json或者yaml中獲取測試數據) 只有yaml和yml結尾的文件以yaml形式
2018/09/07《塗抹MySQL》【引擎】學習筆記(四)
靈活 appears 優點 tables use 做什麽 null div 在線 讀 第七章《引擎》 總結 1:什麽是引擎? - 就是一種數據存取和處理方式。 - 在 MySQL 中,引擎是以"插件式"存在的,使我們可以很方便的使用各種引擎。 2:怎麽查
【Python】學習筆記
數字型別 整數型別:沒有取值範圍限制 浮點數型別:浮點數精度受限,但精度很高,除科學計算外可視為不受限 複數型別:z = a + bj 實數部分:z.real 複數部分:z.imag
【C++】子函式返回結構體的程式碼 及 字串常量傳入子函式的指標實現
說明: 1. 下面的子函式 getStu 裡,傳入了三個引數: 字串指標 char * name 整型變數 int k_year; char * k_sex; 2. 當把字串作為引數傳遞給子函式時,主程式中可以使用字串常量,但子函式的形參只能使用字元型指標 char
【博弈論】學習筆記
帝王為何殺功臣,大副如何謀位船長,傻B的另一種解釋…… 三姬分金 假設有A,B,C三個人,分100枚金幣。怎麼分呢?我們定一個規則,按順序提議,就是A先提議,B,再C,並且如果未超半數以上,不包括半數,同意提議,自己也有投票權。 前提假設: 三人很聰明,追求
【httpClient】學習筆記一
HTTP 協議概述 HTTP–Hyper Text Transfer Protocol,超文字傳輸協議,是一種建立在TCP上的無狀態連線,整個基本的工作流程是客戶端傳送一個HTTP請求,說明客戶端想要訪問的資源和請求的動作,服務端收到請求之後,服務端開始處理