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的结果一样,就不粘代码了
结果:
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;
}
结果:
4、但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。在这里,blue 的值为 6。因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。
把上面的枚举修改为:
enum color {
red, black=5, blue
};
结果:
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 :定义一个指向字符型常量的指针。
(这一段完全没看懂,指针问题不熟,会回来填坑,新人越学越深越头疼)