C++Primer读书笔记(第三章)(04)
3.8枚举类型
枚举提供了一种替代的方法,他不仅定义了整数常量,而且还把他们组成一个集合。
Enum open_modes{input=1,output,append}; //表面上只给第一个赋值了,但后面的系统给他们按顺序递增赋值了。如果都不赋值,则系统从0开始顺序赋值。每一个的默认值都是在前一个的基础上加1,如:如果共有6个元素,第一个赋值为1,第5个赋值为1,其他默认,则他们的值为(1,2,3,4,1,2)。
Void openfile(string file_name,open_modes om){ //函数实现 }
Void main(){openfile(“the new file”, output)} //注意,这时只能使用open_modes列出的三种类型。使用其他就会提示错误。
还可以声明枚举类型对象:
open_modes om = output;
openfile(“the new file”, om); //和类的声明一样使用
但不能打印枚举名:cout<< om;
也不支持迭代:for(open_modes om = output;om!=append;om++)
必要时,枚举类型可以自动提升为算术类型,但不能用数字给枚举类型的元素赋值。例:
int a=10;
int b=a*output; //是正确的(这里执行的是乘法运算)
output = 2; //是错误的。
3.9数组
数组的下标必须为常量。
被显示初始化的数组不需要指定长度:int val[] = {0,1,2,3}; //长度为4
如果指定了长度,那么初始化时不能超过这个长度,少于这个长度的元素默认赋值为0。
字符数组可以用字符初始化:char name[] = {‘c’,‘+’,‘+’};
也可以用字符串来做初始化:char name[] =“c++”;
但这两个却不是等价的,第二个多了一个结束符,长度比第一个多了1。
不允许引用数组,不能用一个数组给另一个数组赋值或初始化。
多维数组:
int val[2][3] = {{1,2,3},{4,5,6}};
int val[2][3] = {1,2,3,4,5,6};两种定义方式
数组指针:
int ia[9] = {};
int *pbegin = ia;// 等同于int *pbegin = &ia[0];
int *pend = ia+9;// 等同于int *pend = &ia[8];