【C语言进阶:自定义类型详解】联合(共用体)

本节重点内容:

  • 联合类型的定义
  • 联合的特点
  • 联合大小的计算

⚡联合类型的定义

联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

为了方便大家理解举个例子:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    char i;
    int a;
};

int main()
{ 
    union Un u;
    printf("%d\n", sizeof(u));
    printf("%p\n", &u);
    printf("%p\n", &(u.i));
    printf("%p\n", &(u.a));
    return 0;
}

运行结果如下:

 图画理解:

当成员变量 i 占一个字节,成员变量 a 占四个字节,而整个联合体也占四个字节,我们发现成员变量 i 和成员变量 a 在共同使用空间。因此 i 变,a 也跟着变,a 变,i 也跟着变。我们在使用联合体时,在同一时间点只能用一个成员。


⚡联合的特点

利用联合体成员共用同一块内存的特点,我们可以得出一种判断当前计算机的大小端存储的方法:

代码示例如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    char c;
    int i;
};

int main()
{ 
    union Un u = { 0 };
    u.c = 1;
    if (u.i == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    return 0;
}

运行结果如下:


⚡联合大小的计算

联合体也是存在对齐规则的。

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

示例一:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    char arr[5];  //5    最大成员大小为5字节
    int i;  //4   最大对齐数为4字节
};

int main()
{ 
    printf("%d\n", sizeof(union Un));
    return 0;
}

运行结果如下:

 示例二:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    short s[7];  //14   最大成员大小为14字节
    int n;   //4   最大对齐数为4字节
};

int main()
{ 
    printf("%d\n", sizeof(union Un));
    return 0;
}

运行结果如下:


 感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

猜你喜欢

转载自blog.csdn.net/JX_BC/article/details/129994899