struct 与 union 的区别
2009-12-21 16:15
399 查看
struct 与 union 的区别
在编程的时候,经常会遇到使用一个变量处理多种数据的情况,在这种情况下,如果我们不考虑使用类,那么就可以是struct(结构)和union(联合)来进行处理。那么,这两种结构之间到底有什么不同呢?可以先看下面的一个小例子。
1
#include < iostream >
2
using namespace std;
3
4
union U1
{
5
char c;
6
int i;
7
double d;
8
} ;
9
union U2
{
10
char c;
11
// int i;
12
// double d;
13
} ;
14
15
union U3
{
16
char c;
17
int i;
18
// double d;
19
} ;
20
21
struct S1
{
22
char c;
23
int i;
24
double d;
25
} ;
26
27
struct S2
{
28
char c;
29
int i;
30
// double d;
31
} ;
32
33
int main()
{
34
cout << " U1's size = " << sizeof (U1) << endl;
35
cout << " U2's size = " << sizeof (U2) << endl;
36
cout << " U3's size = " << sizeof (U3) << endl;
37
cout << endl;
38
cout << " -------------------------------- " << endl;
39
cout << " S1's size = " << sizeof (S1) << endl;
40
cout << " 其中 " << sizeof ( char ) << " + " << sizeof ( int ) << " + " << sizeof ( double ) << " = " << sizeof ( char ) + sizeof ( int ) + sizeof ( double ) << endl;
41
cout << " ---------- " << endl;
42
cout << " S2's size = " << sizeof (S2) << endl;
43
cout << " 其中 " << sizeof ( char ) << " + " << sizeof ( int ) << " = " << sizeof ( char ) + sizeof ( int ) << endl;
44
cout << " -------------------------------- " << endl;
45
S1 s;
46
s.c = ' A ' ;
47
cout << " 1 s.c = " << s.c << endl;
48
s.d = 23.2132 ;
49
cout << " 1 s.d = " << s.d << endl;
50
51
cout << " 2 s.c = " << s.c << endl;
52
cout << " 2 s.d = " << s.d << endl;
53
cout << " ----------------------- " << endl;
54
U1 u;
55
u.c = ' A ' ;
56
cout << " 1 u.c = " << u.c << endl;
57
58
u.i = 23322 ;
59
cout << " 1 u.i = " << u.i << endl;
60
61
u.d = 23.2132 ;
62
cout << " 1 u.d = " << u.d << endl;
63
cout << " 2 u.c = " << u.c << endl;
64
cout << " 2 u.i = " << u.i << endl;
65
return 0 ;
66
}
67
输出结果为:
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 的值就变得无用了。
相关文章推荐
- C++中union和struct的区别
- struct和union的区别
- struct和union的区别
- 大端小端区别、Union和Struct的内存分配、对齐方式
- struct和union的区别
- union 和 struct 的区别与联系
- union 和 struct 的区别与联系
- union与struct的区别
- C语言中,struct与union的区别
- struct/union/enum的区别
- 结构体struct和联合体union以及enum枚举体5的区别
- Union与Struct的区别
- Struct 和 Union区别
- C语言union关键字,union和struct区别
- Struct 和 Union区别
- Union和struct的内存分配区别
- class和struct的区别以及struct和union的区别
- 结构体(struct)和联合体/共同体(union)的联系和区别——名企面试重难点
- struct 与 union 在C与C++中的区别
- union和struct的区别