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