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函數的宏定義)來清零一個內存區域。
共用體有內存對齊問題,這個有興趣自己查找相關資料吧
上一篇功底是否會學的更快