Fork me on Gitee

C语言共用体

C语言共用体

摘要

共用体是一种特殊的数据类型,其允许在一块相同的内存位置存储不同的数据类型,且多种数据类型的变量不同时使用,否则会导致变量的复写。

定义

使用关键字 union定义,与结构体变量的定义方式类似,
格式如下:

    union [union tag]
    {
    member definition;
    member definition;
    ...
    member definition;
    } [one or more union variables];

union tag 可写可不写,写了的话,后续可以反复使用union tag进行变量初始化比如:

    union Data
    {
    int i;
    float f;
    char  str[20];
    };
    union Data data; //创建union Data类型变量data

上述定义的Data类型可以存储多种类型的变量: int , float , char ;
整个union类型的内存长度为其中最长元素的内存长度:即 Data的内存长度为最大元素 char str[20]; 的内存长度: 20字节
例如:

    #include <stdio.h>
    #include <string.h>
    
    union Data
    {
    int i;
    float f;
    char  str[20];
    };
    
    int main( )
    {
    union Data data;        
    
    printf( "Memory size occupied by data : %d\n", sizeof(data));
    
    return 0;
    }   

程序在运行后会输出:Memory size occupied by data : 20

访问

共用体使用(.)运算符号,即 Data.int 可以访问当前 int 类型变量 i 的值,其余元素同理。
如:

  #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

可以看到data中的int元素和float元素被复写了,这是因为共用体使用的是同一个访问地址头,当程序由该地址写入元素值时,
如果在同一时间多次写入,会反复覆盖当前地址下的存储的值,所以会导致程序输出的值与过程中赋予的值不同。当使用者在不同时
间使用data中的元素时,就不会触发这种情况。
转载自:https://www.runoob.com/cprogramming/c-unions.html
诸君共勉。

posted @ 2026-07-05 23:29  RookieGu  阅读(0)  评论(0)    收藏  举报