C语言共用体的定义及使用语法

共用体

C语言中,什么是共用体?通俗地加深记忆的理解方式是实现了内存位置共享(共用)的结构体。当然,这仅是个人的观点,仅供参考。C语言中的共用体可以在同一个内存地址上存储不同数据类型——即不同数据类型的共用体成员。虽然如此,但是多个共用体成员不能同时存储值,任何时候,都只能是其中之一存储值。

共用体定义语法

C语言中共用体的定义语法与C语言的结构体基本类似,不同的是,共用体需要使用union关键词来定义,语法如下:

union tag
{
   member1;
   member2;
   ...
   memberN;
} variable-list;  

提示:共用体中,成员member的声明方式,与声明变量的方式一样,比如 int x;

提示:tag为通用体的标签(名称);

提示:variable-list声明共用体变量,一般为全局变量,多个变量之间使用英文逗号隔开;

共用体实例声明定义

共用体也是C语言的数据结构,不过是可以自定义的,因此声明定义某一类共用体的变量,跟声明其它基本数据的变量的方式类似,不同的是,共用体的名称之前还应当加个union,比如:

union tag varName;

提示:共用体所占用的内存空间大小应该能够存储共用体中最大的成员。

共用体成员访问语法

unionVarName.menber

共用体实例代码

注意下方实例代码解析的内容:

#include <stdio.h>
#include <string.h>
union student{
    int id;
    int score;
    char name[30];
};


int main() {
    union student a;
    a.id = 1;
    printf("%d\n",a.id);
    a.score = 100;
    printf("%d\n",sizeof(a));
    strcpy(a.name, "xiaoming");
    printf("%d\n",sizeof(a.name));
    return 0;
}

代码编译运行,得到输出:

1
32
30

实例解析

如上代码,在对student类型的共用体a的成员进行赋值的时候,为什么要赋值一次,就printf()输出一次,而不是直接将三个成员都赋值了再一次输出呢?这是因此共用体在任何时候都只能有一个成员存储值,要不然可能导致最后一次赋值的成员之前的所有成员的值损坏,大家可以同时赋值然后编译运行试一试。

免责声明:内容仅供参考,不保证正确性!


全栈后端 / C语言教程 :


















Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.