目录
前言
一、定义
联合体类型定义的变量包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
二、内存分配
联合中的成员变量共用同一块内存空间
1.同一个时间只能使用其中一个成员变量
2.改变一个成员变量其他成员变量也会被修改
eg:判断当前机器的大小端字节序
分析大小端不同的字节存储顺序:
利用联合体改变一个成员变量其他成员变量也会被修改的特点,判断大小端:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//判断当前计算机的大小端
int is_little_endian()
{
union Un
{
int a;
char b;
};
union Un i;
i.a = 1;
return i.b;
}
int main()
{
int ret = is_little_endian();
if (ret == 1)
{
printf("小端\n");
}
if (ret == 0)
{
printf("大端\n");
}
}
三、联合体的大小
1.联合体的大小至少是最大成员变量的大小,因为联合体至少得有能力保存占内存空间最大的那个成员,但是联合体的大小不一定是最大成员变量的大小。
2.如果最大成员变量的大小不是对齐数的整数倍,就要对齐到对齐数的整数倍。
3.举个栗子
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//计算联合体的大小
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
int main()
{
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));
return 0;
}
总结
本文主要介绍了自定义类型中的结构体类型的相关知识,希望这篇文章对你理解结构体有所帮助。
当然本文的内容是作者这个初学者对于这些概念的浅薄理解,如果内容中有任何错误或者你觉得不清楚的点,可以在评论区交流(也可以私信作者)。
如果大家喜欢这篇文章,希望可以支持支持作者。作者也在不断学习,之后也会继续上传自己的学习笔记。