前言
一、定义
联合体类型定义的变量包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
二、内存分配
联合中的成员变量共用同一块内存空间
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; }
总结
本文主要介绍了自定义类型中的结构体类型的相关知识,希望这篇文章对你理解结构体有所帮助。
当然本文的内容是作者这个初学者对于这些概念的浅薄理解,如果内容中有任何错误或者你觉得不清楚的点,可以在评论区交流(也可以私信作者)。
如果大家喜欢这篇文章,希望可以支持支持作者。作者也在不断学习,之后也会继续上传自己的学习笔记。