欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言的共用体

程序员文章站 2022-07-11 18:52:55
...

C语言的共用体

1.共用体类型

union 共用体名
{
    成员表列
};
如:
union Data 
{
    int i;
    char ch;
    float f;
}; //注意这里有分号

2.定共用体类型变量

1/ union Data Data1,Data2;  //定义两个变量

2/ 在声明类型的同时定义变量
union Data
{
    int i;
    char ch;
    float f;
} Data1,Data2;

3/ 不指定类型名而直接定义结构体类型变量
union 
{
    成员表列
} 变量名表列;

//共用体与结构体定义形式相似。

结构体变量所占内存长度是各成员占的内存长度之和,
共用体变量所占的内存长度等于最长的成员的长度

所以上union Data类型变量占用4个字节。(因为一个float变量占4个字节)

3.引用共用体变量

//不能引用共用体变量,只能引用共用体变量的成员。
如 
Data1.i //可以,引用共用体变量中的整型变量i
printf("%d",Data1) //不可以

因为变量Data1的存储区可以按不同的类型存放数据,有不同的长度,仅写共用体变量名a,系统无法知道究竟应输出哪一个成员的值。

4.共用体变量特点

C语言的共用体

  • 同一个内存段可以用来存放几种不同类型的成员,但每一瞬时只能存放其中一个成员,而不是同时存放多个;
  • 可以对共用体变量初始化,但初始化表中只能有一个常量。
union Data
{
    int i ;
    char ch;
    float f;
} a = {1,'a',1.5};          //错误,不能初始化3个成员,它们占用同一段存储单元

union Data a = {16};         //正确,对第一个成员初始化
union Data a = {.ch = 'j'};  //C99允许对指定的一个成员初始化
  • 共用体变量中起作用的成员是最后一次被赋值的成员
  • 共用体变量的地址和它的各成员的地址都是同一 地址。(&a.i,&a.c,&a.f都是同一值)
  • 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
  • 以前的C规定不能把共用体变量作函数参数,C允许;共用体变量的指针作函数参数一直允许。
  • 共用体类型可以出现在结构体类型中,也可以定义共用体数组。
相关标签: C语言学习笔记