半亩方塘 天光云影
在编程的时候,经常会遇到使用一个变量处理多种数据的情况,在这种情况下,如果我们不考虑使用类,那么就可以是struct(结构)和union(联合)来进行处理。那么,这两种结构之间到底有什么不同呢?
可以先看下面的一个小例子。
输出结果为:
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 类型的分配的内存大小是应该内部最大数据类型的整数倍,不足一倍的部分会自动补全成一倍大小,应该是编译器为了数据整齐,处理速度会快些把。 union 类型的内存分配,只是和联合体内的最大的一个数据类型的大小相关,而且 union 内的所有数据都在一个单独的内存空间里面。这些就是上面程序出现这样的结果的原因。
所以, u.c 的值是 A ,当给联合体内的其他变量赋值之后, u.c 的值就是一个无用的信息。同样, u.i 的值最初是 23322 ,当给 u.d 赋值 23.2132 之后, u.i 的值就变得无用了。
Powered by: C++博客 Copyright © 北风之神007