大鼠引物在线设计网站,网页设计网站,企业门户网站特征,最近五天的新闻大事目录
枚举
什么是枚举类型#xff1f;
枚举的声明
枚举的定义
枚举的优点
枚举的使用
联合#xff08;共用体#xff09;
什么是联合呢#xff1f;
联合类型的定义
联合的特点
联合使用
联合大小的计算
联合的应用 今天接着我们来结束自定义类型。#x1f19…目录
枚举
什么是枚举类型
枚举的声明
枚举的定义
枚举的优点
枚举的使用
联合共用体
什么是联合呢
联合类型的定义
联合的特点
联合使用
联合大小的计算
联合的应用 今天接着我们来结束自定义类型。
枚举
在初始C语言中学习常量有字母常量 #define定义的标识符常量 cosnt修饰的常变量 枚举常量
什么是枚举类型
枚举顾名思义就是【一一列举】。把可能的取值一一列举。比如我们现实生活中一周的星期一到星期日是有限的7天可以一一列举。人的性别有男女保密也可以一一列举。月份有12个月也可以一一列举。所以就有了枚举类型。
enum tag
{possible value membermember1,member2,member3
};
enum 枚举关键字 不能省略tag 标签 自定义member 枚举的可能取值_枚举常量 后面是逗号最后没有逗号分号 不要忘记
枚举的声明
//枚举类型的声明
enum Sex
{MALE,FEMALE,SECRET
};
enum Color
{RED,GREEN,BLUE
};
简单理解定义一种枚举类型这种类型有有限的取值枚举类型所定义的枚举的常量是不能被修改的枚举常量默认值是从0开始依次1的值枚举常量的默认值是可以在 声明枚举常量 的时候初始化为别的值
#includestdio.h
enum Sex
{MALE4,//okFEMALE5,//okSECRET6
};
enum Sex
{MALE4,//okFEMALE,//ok 5SECRET//6
};
int main()
{MALE5//err❌return 0;
}
枚举的定义
这样定义变量看似可以但是不建议这样写。
//枚举类型的声明
#includestdio.h
enum Sex
{MALE,FEMALE,SECRET
};
int main()
{enum Sex sex MALE;//OKenum Sex sex 2;//err❌//枚举类型 //整型printf(%d\n, sizeof(sex));//4return 0;
}
枚举的优点
我们抛出一个问题为什么要用枚举我们可以使用 #define 定义常量为什么非要使用枚举
enum Sex
{MALE,FEMALE,SECRET
};
//类型#define MALE 3
#define FEMALE 4
#define SECRET 5
//替换
增加代码的可读性和可维护性和#define定义的标识符比较枚举有类型检查更加严谨。防止了命名污染封装便于调试使用方便一次可以定义多个常量
以上都是非常重要的原因在平时写代码我们很少用到枚举但是留时间写代码总会有所感悟的
枚举的使用
enum Color//颜色
{
RED1,
GREEN2,
BLUE4
};
enum Color clr GREEN;//只能拿枚举常量给枚举变量赋值才不会出现类型的差异。联合共用体
什么是联合呢
联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员特征是这些【成员公用同一块空间】所以联合也叫共用体。
union tag
{member - list;
}; union 联合关键字 tag标签 自定义 member-list 成员列表分号 不要忘记
联合类型的定义
union Un
{char c;int i;
};
联合的特点 下面代码那我们猜测一下大小是5个字节吗
#includestdio.h
union Un
{char c;int i;
};
int main()
{union Un un;printf(%d\n, sizeof(un));//return 0;
} 既然都这么问了那肯定不是5个字节的大小。提醒联合体的成员是公用一块空间。 联合的成员是共用同一块内存空间的这样一个联合变量的大小至少是最大成员的大小因为联合至少得有能力保存最大的那个成员。 #includestdio.h
union Un
{char c;int i;
};
int main()
{union Un un;printf(%d\n, sizeof(un));printf(%p\n, un.c);printf(%p\n, un.i);return 0;
} 特点公用同一块空间。所以改变c的同时会改变i同一时间只能访问使用一个数据。 联合使用 面试题判断当前计算机的大小端存储 忘记了大小端的戳一戳C语言之整数_数据存储篇1-CSDN博客
#includestdio.h
int check(int i)
{int* p i;return *(char*)p;
}
int main()
{int i 1;int retcheck(i);if (ret 1){printf(小端存储);}else{printf(大端存储\n);}return 0;
}
用我们的联合也可以轻松搞定
#includestdio.h
int check(int i)
{union Un//可以用匿名联合{char c;int i;};union Un un;un.i 1;return un.c;
}
int main()
{int i 0;int retcheck(i);if (ret 1){printf(小端存储);}else{printf(大端存储\n);}return 0;
}
联合大小的计算 联合的大小至少是最大成员的大小。当最大成员大小不是最大对齐数的整数倍的时候就要对齐到最大对齐数的整数倍。 联合体的大小是最大成员的大小对吗当然是错误的。
#includestdio.h
union Un
{char c[5];int i;
};
int main()
{union Un un;printf(%d\n, sizeof(un));return 0;
} 这个和我们上篇博文讲的对齐有关大家自己算一算。
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
//下面输出的结果是什么
printf(%d\n, sizeof(union Un1));//8
printf(%d\n, sizeof(union Un2));//16
联合的应用
【后面博客我们会讲通讯录的程序】
✔✔✔✔✔最后感谢大家的阅读若有错误和不足欢迎指正
下篇博文我们学习动态内存管理。
代码------→【gitee:唐棣棣 (TSQXG) - Gitee.com】
联系------→【邮箱2784139418qq.com】