C-共用体

2019-08-05  本文已影响0人  小石头呢

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。

您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。

一.定义共用体

为了定义共用体,您必须使用 union 语句,方式与定义结构体类似

union [union tag] {

   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];
//定义一个名为 Data 的共用体类型
//有三个成员 i、f 和 str
union Data{
   int i;
   float f;
   char  str[20];
} data;

定义一个共用体变量和定义枚举和结构体变量类似,同样有三种方式

二.访问共用体成员

为了访问共用体的成员,我们使用成员访问运算符.

#include <stdio.h>
#include <string.h>
 
union Data {
   int i;
   float f;
   char  str[20];
};
 
int main( ){
   union Data data;        
 
   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");
 
   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);
 
   return 0;
}

//运行结果
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

共用体的 i 和 f 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 str 成员能够完好输出的原因

#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( ){
   union Data data;        
 
   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);
 
   return 0;
}

//运行结果
data.i : 10
data.f : 220.500000
data.str : C Programming

所有的成员都能完好输出,因为同一时间只用到一个成员。

共用体的大小

共用体变量所占的内存长度等于最长的成员变量的长度

//共用体Data各占20个字节(因为char str[20]变量占20个字节)
//而不是各占4+4+20=28个字节
union Data{
   int i;
   float f;
   char  str[20];
} data;  
上一篇下一篇

猜你喜欢

热点阅读