C语言:共用体

这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开

如何学好一门编程语言

  • 掌握基础知识,为将来进一步学习打下良好的基础。
  • 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
  • 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了

   共用体允许我们在相同的内存位置存储多个不同数据类型的成员,但是任何时候只能有一个成员带有值。

共用体提供了一种使用相同的内存位置的有效方式。

定义共用体

  共用体的定义和结构体类似,共用体需要使用 union 语句,格式为:

union [共同体标签]
{
   成员定义;
   成员定义;
   ...
} [一个或多个共用体变量];

举例说明:

union Data
{
   int i;
   float f;
   char  str[20];
} data;

共用体标签 和 共用体变量 是可选的,

  共用体 占用的内存等于 最大成员的存储内存

#include <string.h>

union Data{
    int i;
    float f;
    char  str[20];
};

int main(){
    union Data data;
    char  str_1[20];
    float f_1;

    printf("数据占用的内存: %d\n", sizeof(f_1));     // 4
    printf("数据占用的内存: %d\n", sizeof(str_1));   // 20
    printf("数据占用的内存: %d\n", sizeof(data));    // 20

    return 0;
}

访问共用体成员,使用  共用体变量.成员 

#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);    // 1917853763
    printf("data.f : %f\n", data.f);    // 4122360580327794860452759994368.000000
    printf("data.str : %s\n", data.str);    // C Programming

    return 0;
}

我们发现共用体的 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);    // 10

    data.f = 220.5;
    printf("data.f : %f\n", data.f);    // 220.500000

    strcpy(data.str, "C Programming");
    printf("data.str : %s\n", data.str);    //C Programming

    return 0;
}

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

 

参考

菜鸟教程

上一篇:Rust——并查集


下一篇:C笔记 共用体