赞
踩
前言
上一篇 讲解的是结构体相关知识,接着本篇主要讲解的是 联合和枚举 相关知识
结构体、联合体和枚举都属于 自定义类型。
那么接下来就跟上我的节奏,准备发车~
创造不易,可以点点赞吗~
如有错误,欢迎指出~
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。
联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体。
联合体变量uu和c、u的地址一致
结构体和联合体内存存储对比
联合的⼤⼩⾄少是最⼤成员的⼤⼩。
当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。
- #include <stdio.h>
- union Un1
- {
- char c[5];
- int i;
- };
使⽤联合体是可以节省空间的,
举例: ⽐如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。
每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。
把公共属性单独写出来,剩余属于各种商品本⾝的属性使⽤联合体起来,这样就可以 介绍所需的内存空间,⼀定程度上节省了内存。
- struct gift_list
- {
- int stock_number;//库存量
- double price; //定价
- int item_type;//商品类型
-
- union {
- struct
- {
- char title[20];//书名
- char author[20];//作者
- int num_pages;//⻚数
- }book;
- struct
- {
- char design[30];//设计
- }mug;
- struct
- {
- char design[30];//设计
- int colors;//颜⾊
- int sizes;//尺⼨
- }shirt;
- }item;
- };

使用结构设计更简单,⽤起来也⽅便,但是结构的设计中包含了所有礼品的各种属性,这样 使得结构体的⼤⼩就会偏⼤,⽐较浪费内存。因为对于礼品兑换单中的商品来说,只有部分属性信息 是常⽤的
- struct gift_list
- {
- //公共属性
- int stock_number;//库存量
- double price; //定价
- int item_type;//商品类型
-
- //特殊属性
- char title[20];//书名
- int num_pages;//⻚数
-
- char design[30];//设计
- int colors;//颜⾊
- int sizes;//尺⼨
- };
题:将int n=0x11223344以16进制的形式逐个打印
- union U
- {
- int n;
- struct S
- {
- char c1;
- char c2;
- char c3;
- char c4;
- }s;
- };
- int main()
- {
- //int n = 0x11223344;
- union U u = { 0 };
- u.n = 0x11223344;
- //将n逐个字节取出
- printf("%x %x %x %x\n", u.s.c1, u.s.c2, u.s.c3, u.s.c4);
- //%x十进制打印
- return 0;
- }

题:判断当前机器是大端还是小端
- int check_sys()
- {
- union //匿名联合体
- {
- char c;
- int i;
- }u;
- u.i = 1;//共4个字节
- return u.c;//返回第1个字节的位置
- }
-
- int main()
- {
- int ret = check_sys();
- if (ret == 1)
- printf("小端\n");
- else
- printf("大端\n");
- return 0;
- }

枚举即把可能的取值⼀⼀列举。
⽐如我们现实⽣活中: ⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举
枚举类型的声明
枚举的关键字是enum,{}中的内容是枚举类型的可能取值,也叫 枚举常量 。枚举常量取的默认值是0、1、2……依次递增,当然在声明枚举类型的时候也可以赋初始值。
- enum Sex//性别
- {
- MALE,
- FEMALE,
- SECRET
- };
注意:在C语⾔中给枚举变量赋值整数是可以的,但是在C++是不⾏的,C++的类型检查⽐ 较严格。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。