搜索
写经验 领红包
 > 家居

c语言共用体是什么(c语言共用体的赋值和输出)

导语:精通C语言010 共用体(一)概念

c语言共用体是什么(c语言共用体的赋值和输出)

什么是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的应用

本文内容由小悦整理编辑!