C语言 公用体

C语言 公用体

共用体(联合体)

  • 联合union是一个能在同一个存储空间存储不同类型数据的类型;
  • 联合体所占的内存长度等于其最长成员的长度,也有叫做共用体;
  • 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;
  • 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖;
  • 共用体变量的地址和它的各成员的地址都是同一地址。

案例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

// 使用优点:节省内存空间
union Var
{
    int a;
    float b;
    double c;
    char d;
    short f[6];
};

int main(void)
{
    union Var var;
    var.a = 100;
    var.b = 3.14;

    // 最后一次值时有效的、其他会被覆盖
    printf("%d\n", var.a);
    printf("%f\n", var.b);

    // 大小根据最大类型字节算
    printf("%d\n", sizeof(var));

    // 所有类型公用一块内存
    printf("%p\n", &var);
    printf("%p\n", &var.a);
    printf("%p\n", &var.b);
    printf("%p\n", &var.c);

    return 0;
}
公用体 使用案例
#include <stdio.h>
 
//共用体也叫联合体
union Test
{
       unsigned char a;
       unsigned int b;
       unsigned short c;
};
 
int main()
{
       //定义共用体变量
       union Test tmp;
 
       //1、所有成员的首地址是一样的
       printf("%p, %p, %p\n", &(tmp.a), &(tmp.b), &(tmp.c));
 
       //2、共用体大小为最大成员类型的大小
       printf("%lu\n", sizeof(union Test));
 
       //3、一个成员赋值,会影响另外的成员
       //左边是高位,右边是低位
       //低位放低地址,高位放高地址
       tmp.b = 0x44332211;
 
       printf("%x\n", tmp.a); //11
       printf("%x\n", tmp.c); //2211
 
       tmp.a = 0x00;
       printf("short: %x\n", tmp.c); //2200
       printf("int: %x\n", tmp.b); //44332200
 
       return 0;
}
公用体 使用案例:2

 

posted @ 2020-02-29 10:29  kevin.Xiang  阅读(441)  评论(0编辑  收藏  举报