c 再學習(union使用)

2021-09-27 14:01:29 字數 766 閱讀 8349

union這個關鍵字很少見,但是該用到還是會用到的,所以這裡介紹一下

union和struck類似,最大的不同在於,可以儲存不同型別的資料,其所佔記憶體大小以最大的為準(換而言之,乙個能裝char,double和int資料的union所佔記憶體大小為double所佔記憶體(8位元組))

union所有型別的資料共用同一段記憶體空間,換而言之,當你對union關鍵字定義的變數重新賦值時,前乙個值(不管它的型別為何)都會被覆蓋。

當然,由於記憶體位址均從低位取起,所以如果你只是寫入佔較小記憶體的資料,那麼原來的資料並不會全部被覆蓋。

union如何使用?

union test

//對於這個union,其記憶體空間占用為struct的大小——16b

}

為什麼要使用聯合?

其實還是為了記憶體的節省,如果為了每乙個不同型別的變數都分配不同的記憶體空間,我們的記憶體空間就會變得緊張,如果每一次都進行對記憶體的**,這又是過於繁瑣的操作。

而通過聯合,我們可以反覆利用乙個空間,達到節省空間的目的。

當然,使用聯合也會帶來風險,比如說誤把已經覆蓋寫入int的聯合當作char處理,顯然不會得到想要的結果。

聯合有什麼侷限性?

聯合不能用於類,確切地說,聯合不能存放任何有建構函式,析構函式的結構,因為這些物件可能在共享記憶體的過程中無法保持完整——更重要的是無法保證這個過程中會呼叫析構函式,這非常危險。

與此同時,聯合不能用於存放不能共享記憶體的資料——比如引用,再比如靜態變數(靜態同一時間只存在乙個,不能被覆蓋)

C語言再學習 函式

一 函式概述 1 首先什麼是函式?函式是用於完成特定任務的程式 的自包含單元。2 為什麼使用函式?第 一 函式的使用可以身故重複 的編寫。第 二 函式使得程式更加模組化,有利於程式的閱讀修改和完善。3 main函式原型 int main int argc,char argv,char envp 第乙...

朝花夕拾 C 再學習

通過變數名 通過記憶體位址 取位址運算子 用來獲得變數的位址 void getaddress char chararr size int intptr intarr char charptr chararr cout intager array output intptr charptr 輸出結果如...

c 再學習(內聯函式)

什麼是內聯函式?以inline修飾的函式叫做內聯函式,編譯時c 編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,內聯函式提公升程式執行的效率。內聯函式與普通函式執行過程有何不同?普通函式的執行過程中,首先要儲存暫存器的位置,然後傳入引數 這時程式轉到函式處執行,然後再返回,而內聯函式不需要這麼...