C++自学第四天----枚举和typedef 声明

1、枚举

枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],

标识符[=整型常数]
} 枚举变量;

举例:

#include <iostream>
using namespace std;

enum color {
	red, black, blue
};

int main()
{
	//枚举在main()外面里面一样
	/*enum color {
		red, black, blue
	};*/
	enum color test1 = black;
	cout << test1 << endl;
	if ((test1==1)&&(test1==black))
	{
		cout << "succeed!!!!!"<<endl;
	}
	int test2 =black;
	cout << test2<<endl;
	if ((test2 == 1) && (test2 == black))
	{
		cout << "succeed!!!!!" << endl;
	}
	int test3 = 1;
	cout << test3 << endl;
	if ((test3== 1) && (test3 == black))
	{
		cout << "succeed!!!!!" << endl;
	}
	switch (test3)
	{
	case red:
		cout << "red";
		break;
	case black:
		cout << "black";
		break;
	case blue:
		cout << "blue";
		break;
	default:
		break;
	}
	switch (test3)
	{
	case 0:
		cout << "red";
		break;
	case 1:
		cout << "black";
		break;
	case 2:
		cout << "blue";
		break;
	default:
		break;
	}
}

后面的两个switch,test1,test2,test3的结果一样,就不粘代码了

结果:
result
1、我自己总结的枚举变量赋值方式有一下三种,直接输出这三个变量test1,test2,test3,结果都是一样,为1

enum color test1 = black;
int test2 =black;
int test3 = 1;

2、枚举可以不一定要写在main()中
3、默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。

#include <iostream>
using namespace std;

enum color {
	red, black, blue
};
int main()
{	
	int test1, test2, test3;
	test1 = red;
	test2 = black;
	test3=blue;
	cout << test1 << ',' << test2 << ',' << test3;
}

结果:
result
4、但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。在这里,blue 的值为 6。因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。
把上面的枚举修改为:

enum color {
	red, black=5, blue
};

结果:
result

2、typedef 声明

2.1、使用typedef为现有类型创建别名,定义易于记忆的类型名
您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:

typedef type newname; 

例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:

typedef int feet;

现在,下面的声明是完全合法的,它创建了一个整型变量 distance:

feet distance;

其实 wchar_t 是这样来的:

typedef short int wchar_t;

所以 wchar_t 实际上的空间是和 short int 一样。
下面这两个定义语句等价

short int A;
wchar_t A;

一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed
  • unsigned
  • short
  • long

2.2、typedef 还可以掩饰复合类型,如指针和数组。
2.2.1、掩饰数组
例如,你不用像下面这样重复定义有 81 个字符元素的数组:

char line[81];
char text[81];

只需这样定义,Line类型即代表了具有81个元素的字符数组,使用方法如下:

typedef char Line[81];
	Line text, line;
	text[1] = 'a';

2.2.2、掩饰指针
同样,可以像下面这样隐藏指针语法:

typedef char* pstr;
int mystrcmp(const pstr p1, const pstr p3);

用GNU的gcc和g++编译器,是会出现警告的,按照顺序,“const pstr”被解释为“char* const”(一个指向char的指针常量),而事实上,const char和char const表达的并非同一意思,const char的意思是创建一个指向char类型的指针且不能更改指向地址上的值,而char const则是不能更改指向的地址;

  • char* const p : 定义一个指向字符的指针常数,即const指针,常量指针。
  • const char* p :定义一个指向字符型常量的指针。
    这一段完全没看懂,指针问题不熟,会回来填坑,新人越学越深越头疼

菜鸟教程 C++数据类型
百度百科 typedef

posted @ 2019-05-28 19:44  爱做梦的子浩  阅读(167)  评论(0编辑  收藏  举报