数组
关于数组,一点小记。
1、数组维数
数组的维数必须为常量,或常量表达式。该常量表达式只能包含整形字面值常量,枚举常量或者用常量表达式初始化的整形const对象。非const变量以及要运行阶段才知道其值的const变量都不能用于定义数组的维数。
const unsigned buf_size = 512, max_files = 20;
int staff_size = 20;
const unsigned sz = get_size();
char input_buffer[buf_size]; //ok: const variable
int file[max_files + 1]; //ok: constant expression
double salaries[staff_size]; //error: non const variable
int test[get_size()]; //error: non const expression
int vals[sz]; //error: size not know until run time
2、数值初始化
显示初始化数组时,可为其元素提供一组逗号分隔的初值,这些初值用花括号{}括起来,称为初始化列表:
int ia[array_size] = {0, 1, 2};
如果没有提供元素初始值,则数组元素会像普通变量一样初始化:
1>在函数体外定义的内置数组,其元素初始化为0;
2>在函数体内定义的内置数组,其元素无初始化;
3>不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显示初始化。
如果定义了数组维数,那么初始化列表提供的元素个数不能超过维数值。如果维数大于列出的元素初始值个数,则只初始化前面的数组元素;剩余的其他元素若是内置的类型则初始化为0,若是类类型则调用该类的默认构造函数进行初始化。
3、特殊字符数组
字符数组可以用一组花括号括起来、逗号隔开的字符字面值进行初始化,也可以用一个字符串字面值进行初始化。字符串字面值包含一个额外的空字符(null)用于结束字符串。当使用字符串字面值来初始化创建的新数组时,将在新数组中加入空字符:
char ca1[ ] = {'C', '+', '+'}; //no null
char ca2[ ] = {'C', '+', '+', '\0'}; //explicit null
char ca3[ ] = "c++"; //null terminator added automatically
使用一组字符字面值初始化字符数组时,一定要记住添加结束字符串的空字符。
const char day[6] ="monday"; //error: monday is 7 elements.