首页 > 编程语言 > 详细

C语言 公用体

时间:2020-02-29 11:15:03      阅读:57      评论:0      收藏:0      [点我收藏+]

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

 

C语言 公用体

原文:https://www.cnblogs.com/xiangsikai/p/12381736.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!