色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

union的用法是節約內存還是方便初始化

劉姿婷2年前17瀏覽0評論

union的用法是節約內存還是方便初始化?

都不是。

你得從內存的角度來理解。

比如一個int和一個char[4],如果是

struct{

int a;

char [4] b;

}

那在內存里是這樣的

[ a ][b[3]b[2]b[1]b[0]]

而union則會使這樣的

[ a ]

[b[3]b[2]b[1]b[0]]

至于用處,舉個比較明顯的,base64編碼,是把3個8位共計24位通過移位變為4個6位的數據,再對應編碼。

這樣的運算會有跨邊界問題,如果是char,則有8位,通過位運算顯然有些復雜,那我們就用上面這個共用體,給b[2]b[1]b[0]分別賦值,然后再操作a進行移位操作,這樣既簡單又高效。

至于節約內存之說,主要指有些數據不會同時存在,例如老師沒有成績,學生沒有工資,那么成績和工資不會同時存在,那就都用一個float的共用體表示,但是實際使用的時候只訪問一個。

至于你說的初始化的問題,在windows下通常使用ZeroMemory(一個memset函數的宏定義)來清零一個內存區域。

共用體有內存對齊問題,這個有興趣自己查找相關資料吧