联合、枚举和类型别名

联合

联合与结构与很多相似之处,联合也可以容纳多重不同类型的值,但是它每次只能存储这些值中的某一个。

例如:我们要定义一个变量来存放某种密码,我们可以选择时你女朋友的生日、身份证后4后数字或者你养的宠物的名字等等。

union mima
{
	unsigned long birthday;
	unsigned short ssn;
	char *pet;
};

定义了这个联合类型后,就可以像下面这样创建一个该类型的变量了:

mima mima_1;

再接下来,我们可以像对结构成员进行赋值那样对联合里的成员进行赋值,使用同样的语法:

mima_1.birthday = 19930809;

上面这条语句是将19930809存入mima_1联合的birthday里面。如果我们再执行下边语句:

mima_1.pet = "mimi";

这个联合将把“mimi”存入mima_1联合的pet成员,并丢弃birthday成员里面的值。

举个例子:

#include <iostream>
using namespace std;

union mima
{
	unsigned long birthday;
	unsigned short ssn;
	const char *pet;
};

int main()
{
	mima mima_1;

	mima_1.birthday = 19930809;
	cout << mima_1.birthday << endl;

	mima_1.pet = "mimi";
	cout << mima_1.pet << endl;
	cout << mima_1.birthday << endl;
	
	return 0;
}

枚举

枚举(enum)类型用来创建一个可取值列表:

enum weekdays{Monday, Tuesday, Wednesday, Thursday, Friday};

定义了一个枚举类型后,我们就可以像下面这样创建该类型的变量:

weekdays today;

然后我们像下边的方式对它进行赋值:

today  = Thursday;

下面举例

#include <iostream>
using namespace std;

enum weekdays{Monday, Tuesday, Wednesday, Thursday, Friday};

int main()
{
	enum weekdays { Monday, Tuesday, Wednesday, Thursday, Friday };

	weekdays today;

	today  = Thursday;
	cout << today << endl;

	today = Monday;
	cout << today;

	return 0;
}

这里输出的是3和0,并不是两个英文哈

注意:这里不需要使用引号,因为枚举值不是字符串

编译器会按照各个枚举值在定义时出现的先后顺序把它们与0 ~ n-1的整数(n是枚举值的总个数)分别关联起来

使用枚举类型有两个好处:

- 它们对变量的可取值加以限制;

- 它们可以用做switch条件语句的case标号。(因为字符串是不能作为标号用的)

switch (today)
	{
	case Monday:
	}

类型别名

最后我们来介绍Typedef保留字(指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用),使用它可以为一个类型定义创建一个别名

例如,我们不喜欢使用int*来创建指针,可以像下边这样定义一个类型别名:

typedef int* intPointer; //有点类似于define,不过这里是定义的类型别名

在此之后,我们就可以像下边这样来定义整形指针了:

intPointer myPointer;
#include <iostream>
using namespace std;
typedef int* intPointer;

int main()
{
	
	int a;
	intPointer b = &a;
	cout << "请输入a的值:" << endl;
	cin >> a;
	cout << "a = " << *b << endl;

	return 0;
}

注意,现在的b已经是一个指针变量了,如果直接输出b的话就是输出了a的地址,所以要用解引用,用*b。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值