首页 > C语言 > C语言union(联合体 共用体)

C语言union(联合体 共用体)

一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。
一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。

  1. union中可以定义多个成员,union的大小由最大的成员的大小决定。
  2. union成员共享同一块大小的内存,一次只能使用其中的一个成员。
  3. 对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存)

下面看一个简单的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
typedef union{
	char c;
	int a;
	int b;
}Demo;
 
int main(int argc, char **argv)
{
	Demo d;
	d.c = 'H';
	d.a = 10;
	d.b = 12;
 
	printf("size: %d\n", sizeof(d));
	printf("%c\t%d\t%d\n", d.c, d.a, d.b);
 
	return 0;
}

union程序运行结果


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> C语言union(联合体 共用体)
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: C语言 标签: , ,
  1. 2011年1月13日19:48 | #1

    很多东西自己写写看,记忆深刻

    [回复]

  2. 2011年1月13日23:19 | #2
  3. 2011年1月15日08:40 | #3

    觉得这题把d.b的大小举到128以后更合适,这样就可以体现出d.c只使用了前八位。

    [回复]

  4. 2011年1月16日13:49 | #4

    我在GUI编程中就没用过这玩意

    [回复]

  5. 2011年2月1日13:50 | #5

    @C瓜哥
    如果你经常用Win32 SDK 里面很多东西就用的这个玩意

    [回复]

  6. 2011年2月1日13:50 | #6

    @Tanky Woo
    恩恩 这个不错

    [回复]

  7. 2012年7月12日11:45 | #7

    居然说本质上和结构体是一样的…….
    结构体提供对几段连续内存的组合支持, 而结构体提供不同方式对待一段内存的支持.
    完全不同好不好 [em020]

    [回复]

    代码疯子 回复:

    @weet, [em018]

    [回复]