一、联合(union)
1.定义
联合与结构相似,也可以容纳不同类型的值,但每次只能存一个值,若在容纳另一个值将会把前面的值覆盖调(即:多个变量使用同一个内存空间,但内存空间只有1个,所以要这些变量在不同时间用才行)
2.结构
union mima//这里和结构体类似,就是吧struct改为union
{
unsigned long birthday;
unsigned short ssn;
char *pet;
};
mima mima_1;//创建该联合类型的变量
//对结构成员进行赋值
mima_1.birthday=19980105;
//然后再执行下面语句(这里是验证联合类型只能存一个值,否则会被覆盖)
mima_1.pet=”xxx”//执行这个语句时会把birthday成员的值丢弃
3.举例
#include <iostream>
using namespace std;
union mima
{
unsigned long birthday;
unsigned short ssn;
char *pet;
};
int main()
{
mima mima_1;
mima_1.birthday=19980105;
cout<<mima_1.birthday<<"\n";
mima_1.pet="xxx";
cout<<mima_1.pet<<"\n";
cout<<mima_1.birthday<<"\n";//这个的值已经被覆盖,输出的是它在内存中的地址
return 0;
}
//19980105
//xxx
//4751362
4.总结
1.为了节省空间时使用联合类型(只提供一个内存)
2.使用不同方式解释数据时不用强制转换时也可以用联合类型
二、枚举(enum)
1.定义
枚举(enum)类型用来创建一个可取值的列表
2.用法(结构)
enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday};
//下面创建该类型的变量
weekdays today;
//下面方式对它赋值
today Thursday;//注意Monday,Tuesday…这些并不是字符串,而是从0开始的值,变量的赋值只能出现在上面五个元素中
3.举例
#include <iostream>
using namespace std;
int main()
{
enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday};//这些值不是字符串,默认Monday为0,Tuesday为1......
weekdays today;
today=Monday;
cout<<today<<"\n";
today=Tuesday;
cout<<today<<"\n";
return 0;
}
//结果是0,1
- 若将Monday赋值为1
#include <iostream>
using namespace std;
int main()
{
enum weekdays{Monday=1,Tuesday,Wednesday,Thursday,Friday};
weekdays today;
today=Monday;
cout<<today<<"\n";
today=Tuesday;
cout<<today<<"\n";
return 0;
}
//结果是1,2
4.总结
1.它可以对变量的可取值加以限制(比如本来枚举定义为Monday,若后面写成Monday1,是不实现的)
2.它可以用作switch条件语句的case标号(因为字符串不能作为case的标号用)(小技巧)