数组

关于数组,一点小记。

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.

 

posted on 2016-07-28 15:26  一寸雪蓝  阅读(200)  评论(0编辑  收藏  举报