> 家居
c语言共用体是什么(c语言共用体的赋值和输出)
导语:精通C语言010 共用体(一)概念
什么是union?
union的书面翻译有很多种,比如联合,共用体等,这里选取共用体这个名字,并没有特别的意思。
共用体是一种简单的数据类型,其主要思想是几个成员共用一段内存,如下:
union{ char a; int b;}u_s;
成员a和b共用一段内存,因此起始地址相同。从汇编层面看也是这样简单,并没有特别的地方。
通俗的说,就像一个东西有两种状态一样,要么是a,要么是b,但一个时刻只有一种状态,比如:
u_s.a=&39;;u_s.b=20;
此时最后的状态就是int数20。
union定义
union和struct、枚举非常相似,都是自定义类型,这也是作者为什么把它们放在一起写作的原因。
union原本长这样
union {int a;char c;};
由于没有名字,我们可以称为匿名共用体。这整个一块是类型名,我们可以用来定义变量,x比如:
union{int a;char c;} u1;union{int a;char c;} u2;
由于类型太长,我们起个标识符,变成下面这样:
union u_s{int a;char c;};union u_s u1,u2;
此时union u_s=union{int a;char c;},完整的类型名为:union u_s。
赋值
赋值只能给共用体中的一项赋值,例如:
union u_s{ int a; char c;};union u_s u;u.a=20;//或者u.c=&39;;
如果union成员有多个结构成员呢?
union u_s{ //共用体成员book struct s_a{ char title[32]; }book; //共用体成员info struct s_b{ char name[16]; int numbers; }info;};union u_s u;strcpy(u.info.name,&34;); //给person.name赋值printf(&34;,u.info.name);//打印&34;printf(&34;,u.info.title);//打印&34;
C标准提出:如果共用体的成员为结构,且结构的开始成员类型和顺序都相同,一个赋值也会导致另一个成员也被定义,代码展示了这一点。
结语
本篇简单介绍了下union类型,由于它本身比较简单,所以写的比较少些,下篇具体写下union的应用
本文内容由小悦整理编辑!