C-联合体

Posted khrushchefox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-联合体相关的知识,希望对你有一定的参考价值。

联合体

联合体中的变量共用同一个空间

创建和使用

#include <stdio.h>

union Object

    int a;
    char b;
    float c;
;

int main()

    union Object object;
    object.a = 65;
    printf("%c", object.b);  // \'A\'
    return 0;

内存大小

printf("%llu", sizeof(union Object));  // 4

计算规则:

  1. 联合体中最大成员所占内存的大小
  2. 必须为最大类型所占字节的最小倍数

C的联合体和结构体区别

联合体与结构体是很容易混淆的概念。粗略一看,两者无论声明、定义还是定义对象的方式都很相似。然而这两个东西的概念和作用实际千差万别。
首先,联合体的各个成员共用内存,并应该同时只能有一个成员得到这块内存的使用权(即对内存的读写),而结构体各个成员各自拥有内存,各自使用互不干涉。所以,某种意义上来说,联合体比结构体节约内存。
举个例子:
typedef struct
{
int i;
int j;
}A;
typedef union
{
int i;
double j;
}U;
sizeof(A)的值是8,sizeof(U)的值也是8(不是12)。
为什么sizeof(U)不是12呢?因为union中各成员共用内存,i和j的内存是同一块。而且整体内存大小以最大内存的成员的划分。即U的内存大小是double的大小,为8了。sizeof(A)大小为8,因为struct中i和j各自得到了一块内存,每人4个字节,加起来就是8了。
了解了联合体共用内存的概念,也就是明白了为何每次只能对其一个成员赋值了,因为如果对另一个赋值,会覆盖了上一个成员的值。

是的,函数的重载是在编译的时候发生,而虚函数是在运行的时候确定。其实有时候称函数的重载为静态多态性,而虚函数为动态多态性

以上是关于C-联合体的主要内容,如果未能解决你的问题,请参考以下文章

C语言中关于联合体中成员变量的问题

C++11新特性:13—— C++11非受限联合体(union)

C-联合体

C语言干货分享 | C语言的联合体

C 联合体

C语言—联合体/共用体