请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 206|回复: 10

[C语言] C语言共用体(共同体)

[复制链接]

3172

主题

3269

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22691
发表于 2015-12-24 21:30:27 | 显示全部楼层 |阅读模式
共用体(共同体)的定义和结构体类似,不过结构体的各个成员都会分配相应的内存空间,而共用体的所有成员共享一段内存,它们的起始地址一样,并且同一时刻只能使用其中的一个成员变量。
共用体在实际开发中应用较少,你可以暂时跳过,需要时再来温习。
共用体定义的一般格式为:union 共用体名{
    成员列表
};

例如:
  • //先定义共用体,再定义变量
  • union data{
  •     int i;
  •     char ch;
  • };
  • data a, b, c;


或者:
  • //定义共用体的同时定义变量
  • union data{
  •     int i;
  •     char ch;
  • } a, b, c;


共用体所占用的内存空间大小等于最长的成员所占用的字节数。共用体使用了覆盖技术,几个成员变量相互覆盖,从而使几个不同变量共占同一段内存。这也就意味着,同一时刻只能存放一个成员变量的值,只能有一个成员存在,不可能像结构体一样同时存放。如果对新的成员变量赋值,就会把原来成员变量的值覆盖掉。

共用体 data 中,成员 i 所占用的空间最大,为 4 个字节,所以 data 类型的变量(也就是a、b、c)也占用4个字节的内存。请看下面的例子:
  • #include <stdio.h>
  • union{
  •     int i;
  •     char c;
  • }a;
  • int main(){
  •     printf("Size of a: %d\n", sizeof(a));
  •     a.c='A';  //此时共用体变量4个字节的取值情况为0x00000041
  •     printf("a.i = %d\n",a.i);
  •     a.i=0x42;  //0x42为字母B的ASCII码
  •     printf("a.c = %c\n",a.c);
  •     return 0;
  • }


运行结果:
Size of a: 4
a.i = 65
a.c = B

两个不能:不能使用共用体变量,只能引用共用体变量中的成员。不能在定义共用体变量时进行初始化。
回复

使用道具 举报

1

主题

886

帖子

5

积分

注册会员

Rank: 2

积分
5
发表于 2016-1-2 16:25:07 | 显示全部楼层
顶顶
回复 支持 反对

使用道具 举报

0

主题

864

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2016-1-11 16:05:23 | 显示全部楼层
赞赞
回复 支持 反对

使用道具 举报

1

主题

1042

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2016-1-25 21:30:38 | 显示全部楼层
这个资料非常不错,好东东!
回复 支持 反对

使用道具 举报

2

主题

948

帖子

83

积分

注册会员

Rank: 2

积分
83
发表于 2016-2-14 19:17:13 | 显示全部楼层
希望楼主能够收集更多的资料,谢谢了!
回复 支持 反对

使用道具 举报

2

主题

948

帖子

83

积分

注册会员

Rank: 2

积分
83
发表于 2016-2-20 18:53:59 | 显示全部楼层
这个资料非常不错,好东东!
回复 支持 反对

使用道具 举报

0

主题

178

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
发表于 2016-2-22 16:07:03 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
回复 支持 反对

使用道具 举报

1

主题

886

帖子

5

积分

注册会员

Rank: 2

积分
5
发表于 2016-6-15 15:10:19 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

2

主题

941

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2017-3-28 21:33:28 | 显示全部楼层
抱走~老好人
回复 支持 反对

使用道具 举报

0

主题

590

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2017-11-23 22:21:56 | 显示全部楼层
楼主不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-11-21 01:34 , Processed in 0.206947 second(s), 26 queries .

快速回复 返回顶部 返回列表