轻松拿捏C语言——自定义类型之【联合体与枚举】
爆更小哇 2024-06-25 11:35:02 阅读 61
🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊
🎉创作不易,请多多支持🎉
🌈感谢大家的阅读、点赞、收藏和关注💕
🌹如有问题,欢迎指正
目录👑
🌟一、联合体(共用体)
🌙1、声明
🌙2、特点
🌙3、大小计算
🌟二、枚举类型
🌙1、声明
🌙2、优点
🌙3、使用
🌟一、联合体(共用体)
🌙1、声明
联合体和结构体一样可以有多个成员,成员类型可以不同。
联合体所有成员共用一块空间,所以联合体又叫 共用体
一个联合变量的大小至少是最大成员的大小
在声明上,联合体和结构体类似,只是把struct关键字换成了union关键字。
给联合体一个成员赋值,其他成员的值也会跟着变化
#include <stdio.h>
//联合类型的声明
union Un
{
char c;
int i;
};
int main()
{
//联合变量的定义
union Un un = { 0 };
//计算连个变量的⼤⼩
printf("%d\n", sizeof(un));
return 0;
}
这里结果为4,因为这里int最大,占四个字节
🌙2、特点
代码1
#include <stdio.h>
//联合类型的声明
union Un
{
char c;
int i;
};
int main()
{
//联合变量的定义
union Un un = { 0 };
// 下⾯输出的结果是⼀样的吗?
printf("%p\n", &(un.i));
printf("%p\n", &(un.c));
printf("%p\n", &un);
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;
}
运行结果
可以看到结果不是11223344,第四个字节内容44被换成了55
🌙3、大小计算
联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
(这里最大对齐数和结构体中一样,
可以参考轻松拿捏C语言——自定义类型之【结构体】-CSDN博客)
举例:
#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;
}
结果为8和16。
你对了吗?
在union Un1中成员有两个,char c[5]占5个字节大小,在vs中1<8,所以char的对齐数为1,int i占4个字节大小,在vs中4<8,所以int类型对齐数为4, 所以在union Un1中最大对齐数为4。
最大成员大小为5,5不是最大对齐系数4的倍数,所以对齐到8
在union Un2同理。
用联合体判断大小端字节序
int check_sys()
{
union
{
int i;
char c;
}un;
un.i = 1;
return un.c;//返回1是⼩端,返回0是⼤端
}
🌟二、枚举类型
🌙1、声明
枚举就是一 一列举,
比如列举性别有男女,列举月份有1~12月,列举一周有7天
枚举类型关键字enum
星期:
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
性别:
enum Sex//性别
{
MALE,
FEMALE,
SECRET
};
这里的enum Day , enum Sex都是自定义的枚举类型
{ }中的内容就是枚举类型的可能取值,也叫 枚举常量
这些枚举常量是有值的,默认从0开始递增,但也可以在声明的赋初值
enum Color//颜⾊
{
RED=2,
GREEN=4,
BLUE=8
};
🌙2、优点
我们可以用#define 定义常量,为什么非要用枚举?
枚举的优点:
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号
4. 使用方便,一次可以定义多个常量
5. 枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用
🌙3、使用
使用枚举常量给枚举变量赋值
enum Color//颜⾊
{
RED=1,
GREEN=2,
BLUE=4
};
enum Color clr = GREEN;
在C语言中可以给枚举变量赋值,比如 enum Color clr = 5;但不推荐这样
但在C++中这样是不行的
🎉🎉🎉本文内容结束啦,希望各位大佬多多指教!
🌹🌹感谢大家三连支持
💕敬请期待下篇文章吧~🥰
上一篇: 初始Java篇(JavaSE基础语法)(8)认识String类(上)
下一篇: 雷电模拟器安装Magisk+Lsposed+TrustMeAlready-v1.11+fidder超详细教程步骤实现网络app抓包
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。