ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

嵌入式开发C语言篇--联合和枚举

嵌入式开发C语言篇--联合和枚举 1联合体类型的声明1.1联合体的声明像结构体一样联合体也是有一个或多个成员构成这些成员可以是不同类型联合体的关键字是union但是编译器只为最大的成员分配足够的内存空间联合体的特点是所有成员共用同一块内存空间所以联合体也叫共用体1.2联合体的特点① 这样一个联合体变量的大小至少是最大成员的大小因为联合至少得有能力保存最大的那个成员②联合的成员是共用同一块内存空间的即内存地址相同③给联合体其中一个成员赋值其他成员也跟着变化1.3相同成员的结构体和联合体对比我们在对比一下相同成员的结构体和联合体的内存布局情况1.4联合体大小的计算①联合体的大小至少是最大成员的大小②当最大成员大小不是最大对齐数的整数倍的时候就要对齐到最大对齐数的整数倍练习一sizeof(un14练习二1.最大成员大小char arr[5],5个字节2.全部成员对齐数取最大max(1,4)43.5不是4的整数倍向上补齐到最近4的倍数8sizeof(un28练习三最大成员8最大对齐数8sizeof(un38练习四最大成员大小8最大对齐数max(4,2)4;8是4的倍数sizeof(un481.5联合体的应用使用联合体是可以节省空间的举例有三种商品图书杯子衬衫每一种商品都有库存量价格商品类型和其他信息我们要存储商品的信息图书书名作者页数杯子设计衬衫设计可选颜色可选尺寸上述结构体设计简单用起来方便但是结构的设计中包含了所有礼品的各种属性这样得到的结构体的大小就会偏大比较浪费内存所以我们就可以把公共属性单独写出来剩余属于各种商品本身的属性使用联合体这样就可以节省内存1.5联合的一个练习写一个程序判断当前机器是大端还是小端2.枚举类型2.1枚举类型的声明枚举顾名思义就是一一列举它把一组命名的整型常量打包在一起用来表示固定的有限选项把可能的值一一列举enum是枚举的关键字比如一周的星期一到星期日是有限的7天可以一一列举以上定义的enum Day,enum Sex,enum Color都是枚举类型2.2枚举常量默认规则默认从0开始依次加1也可以手动指定值枚举变量本质就是存一个整数可以用int接收2.3枚举的优点1.可读性高RED比写数字0更容易看懂2.限定可选范围只能在枚举列表里选避免乱赋值3.可以用switch做分支非常适合状态位标志位用typedef简化枚举工程常用,用枚举常量给枚举变量赋值易错点1.枚举成员是全局常量不要和变量名重名2.枚举变量c 可以存任意int 数字编译器不会强制校验只能取枚举里面的值3.枚举不占内存枚举成员只是符号常量编译阶段替换成整数不分配内存只有枚举变量才占用内存VSsizeof(枚举4字节已完结
返回列表