【C语言】轻松拿捏-联合体

谢谢观看!希望以下内容帮助到了你,对你起到作用的话,可以一键三连加关注!你们的支持是我更新地动力。
因作者水平有限,有错误还请指出,多多包涵,谢谢!


一、联合体类型的声明

  
在这里插入图片描述

//联合体的关键字:union
//结构体的关键字:struct
//枚举的关键:enum

struct s
{
	char c;//0
	//1~3 浪费了
	int i;//4~7
};

union un//联合体的声明
{
	char c;
	int i;
};

int main()
{
	printf("%zd\n", sizeof(struct s));//8
	printf("%zd\n", sizeof(union un));//4

	return 0;
}

  


二、联合体的特点

  
  联合体的特点:联合的成员是共用同一块内存空间的,这样一个联合变量的大小至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员),但不一定等于最大成员的大小
  
在这里插入图片描述
  虽然我们知道了它们是同一个起始地址,但是该如何具体的看到内存的变化呢?其实我们可以通过调试窗口观察

//代码2
#include <stdio.h>
//联合类型的声明
union Un
{
 char c;
 int i;
};
int main()
{
 //联合变量的定义
 union Un un = {0};
 un.i = 0x11223344;
 un.c = 0x55;
 printf("%x\n", un.i);
 return 0;
}

  变化之前
  
在这里插入图片描述
  变化之后
  
在这里插入图片描述
  
  通过上面的代码比较可以看出:联合的成员是共用同一块内存空间的
  


三、联合体大小的计算

  
联合体大小计算规则

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
union Un
{
	short arr[7];//14    2 8 2
	//将数组拆开相当于有7个short的数据
	int i;//4            4 8 4
	//所以实际最大对齐数是4,那么联合体的整体大小是实际最大对齐数的整数倍
	//14不是,16是,那么浪费了2个字节
};

int main()
{
	printf("%d\n", sizeof(union Un));//结果是16

	return 0;
}

四、联合的一个练习

  写⼀个程序,判断当前机器是大端?还是小端?

int check_sys()
{
    union
    {
        int i;
        char c;
    }un;
    un.i = 1;
    return un.c;//返回1是⼩端,返回0是⼤端
}

int main()
{
    check_sys();
    return 0;
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 23:40:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 23:40:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 23:40:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 23:40:02       20 阅读

热门阅读

  1. string类的模拟实现的一些改进

    2024-06-09 23:40:02       10 阅读
  2. 快速排序(Quick_Sort)

    2024-06-09 23:40:02       8 阅读
  3. 力扣算法题:轮转数组 -- 多语言实现

    2024-06-09 23:40:02       11 阅读
  4. 爬虫实现思路

    2024-06-09 23:40:02       8 阅读
  5. GameDriver XR测试自动化工具概述

    2024-06-09 23:40:02       9 阅读
  6. 【springboot&neo4j】版本差异对比

    2024-06-09 23:40:02       7 阅读
  7. 01 基础知识

    2024-06-09 23:40:02       12 阅读
  8. Python3 笔记:字符串的 replace() 和 expandtabs()

    2024-06-09 23:40:02       7 阅读
  9. 如何在React中创建自定义Hooks

    2024-06-09 23:40:02       9 阅读