美文网首页
C语言共用体Union

C语言共用体Union

作者: YanZi_33 | 来源:发表于2021-02-09 10:16 被阅读0次

共用体是一种特殊的数据类型,允许你在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。

共用体Union的定义

union 共用体名
{
成员列表
};

union Data
{
    int a;
    float b;
    char str[20];
};
  • 定义了一个Data类型的共用体,包含三个不同类型的数据成员;

共用体Union变量的声明

  • 直接在共用体定义声明的末尾添加一个变量名,不过这个共用体变量是全局的。
union Data
{
    int a;
    float b;
    char str[20];
}data;

上面声明了一个共用体变量data;是一个全局的共用体变量。

  • 直接在共用体类型后面 加上变量名,声明的共用体变量是局部的。
union Data
{
    int a;
    float b;
    char str[20];
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        //共用体变量data1
        union Data data1;
        //共用体变量data2
        union Data data2;
        
    }
    return 0;
}

共用体Union变量的初始化

  • 先声明共用体变量,然后再进行初始化.
union Data
{
    int a;
    float b;
    char str[20];
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        union Data data2;
        data2.a = 10;
        data2.b = 12.3f;
        strcpy(data2.str,"liyanyan");

    }
    return 0;
}

共用体Union变量访问数据成员

结构体变量名.成员名

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        union Data data2;
        data2.a = 10;
        data2.b = 12.3f;
        strcpy(data2.str,"liyanyan");

        printf(" a = %d",data2.a);
        printf(" b = %f",data2.b);
        printf(" str = %s",data2.str);
        
    }
    return 0;
}

共用体Union变量的内存大小

  • 上面Data类型的共用体变量data2可以存储一个整数、一个浮点数,或者一个字符串。这意味着一个data2(相同的内存位置)可以存储以上三种类型的数据;注意是相同的内存位置;也就是说在同一时刻只有一种类型的数据才能访问到。

  • 共用体变量的内存大小是数据成员中所占内存最大的那个数据成员的内存大小。

union Data
{
    int a;
    float b;
    char str[3];
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        union Data data2;
        data2.a = 10;
        data2.b = 12.3f;
        strcpy(data2.str,"li");
        
        NSLog(@" size = %lu",sizeof(data2)); //size = 4
    }
    return 0;
}

上面的共用体变量data2所占内存大小为4个字节,最大的数据成员为float b.

union Data
{
    int a;
    float b;
    char str[20];
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        union Data data2;
        data2.a = 10;
        data2.b = 12.3f;
        strcpy(data2.str,"li");
        
        NSLog(@" size = %lu",sizeof(data2)); //size = 20
    }
    return 0;
}

上面的共用体变量data2所占内存大小为20个字节,最大的数据成员为char str[20].

共用体Union变量所占内存

联合体是由不同的数据类型组成,但其变量是互斥的,所有的成员共占一段内存。而且共用体采用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会将原来成员的值覆盖掉。
缺点:包容性弱
优点:所有成员共用一段内存,使内存的使用更为精细灵活,同时也节省了内存空间。

相关文章

  • C++的共用体使用场景

    C++使用union 描述 union是C语言中一种声明共用体的数据类型,使用union声明的共用体只会占用共用体...

  • iOS共用体

    iOS共用体 一、何为共用体 在C语言中有union联合体/共用体。 union中可以定义多个成员,union的大...

  • C语言共用体Union

    共用体是一种特殊的数据类型,允许你在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时...

  • 嵌入式学习笔记19.11.27

    c语言共用体: #include union st{ int x; char a; char s[10]; }st...

  • 三、C语言基础

    A、struct 结构体 结构体:里面所有的成员,默认都是public B、pragma C、union 共用体/...

  • 嵌入式第十天:结构

    今天来说一下C语言里的结构体(struct)、共用体(l联合体)union、枚举。欢迎加入嵌入式学习群:55960...

  • C语言的一些符号含义、 函数含义

    union:共用体/联合体 union 共用体名{成员列表};类似结构体,是一群变量的集合,和集合不同的是: 共用...

  • C语言union(联合体 共用体)

    union中可以定义多个成员,union的大小由最大的成员的大小决定。 union成员共享同一块大小的内存,一次只...

  • C语言共用体

    共用体 共用体的格式:union 共用体名称{数据类型 属性名称;数据类型 属性名称;... ...}共用体定义的...

  • 共用体union

    union data{ int i; char ch; double d; }a,b,c; 将几种不同类型的变量...

网友评论

      本文标题:C语言共用体Union

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