美文网首页
C-共用体

C-共用体

作者: 小石头呢 | 来源:发表于2019-08-05 00:26 被阅读0次

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

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

    一.定义共用体

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

    union [union tag] {
    
       member definition;
       member definition;
       ...
       member definition;
    } [one or more union variables];
    
    • union tag 是可选的,每个 member definition 是标准的变量定义
    • 在共用体定义的末尾,,您可以指定一个或多个共用体变量,这是可选的
    //定义一个名为 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;  
    

    相关文章

      网友评论

          本文标题:C-共用体

          本文链接:https://www.haomeiwen.com/subject/ensydctx.html