半畝方塘 天光云影
在編程的時候,經常會遇到使用一個變量處理多種數(shù)據(jù)的情況,在這種情況下,如果我們不考慮使用類,那么就可以是struct(結構)和union(聯(lián)合)來進行處理。那么,這兩種結構之間到底有什么不同呢?
可以先看下面的一個小例子。
輸出結果為:
U1's size =8
U2's size =1
U3's size =4
--------------------------------
S1's size =16
其中 1+4+8=13
----------
S2's size =8
其中 1+4=5
1 s.c = A
1 s.d = 23.2132
2 s.c = A
2 s.d = 23.2132
-----------------------
1 u.c = A
1 u.i = 23322
1 u.d = 23.2132
2 u.c =
2 u.i = 1181975000
解釋:
struct 類型的內存分配是結合內部的所有變量大小和相關的,但不是簡單的相加,從上面的例子就可以看出來, struct 類型的分配的內存大小是應該內部最大數(shù)據(jù)類型的整數(shù)倍,不足一倍的部分會自動補全成一倍大小,應該是編譯器為了數(shù)據(jù)整齊,處理速度會快些把。 union 類型的內存分配,只是和聯(lián)合體內的最大的一個數(shù)據(jù)類型的大小相關,而且 union 內的所有數(shù)據(jù)都在一個單獨的內存空間里面。這些就是上面程序出現(xiàn)這樣的結果的原因。
所以, u.c 的值是 A ,當給聯(lián)合體內的其他變量賦值之后, u.c 的值就是一個無用的信息。同樣, u.i 的值最初是 23322 ,當給 u.d 賦值 23.2132 之后, u.i 的值就變得無用了。
Powered by: C++博客 Copyright © 北風之神007