例9.1.1 下列程序段中对数组定义错误的是( )。
A.int a[10+2] B.int length = 10; in a[length]
C.int const length = 10; int a[length] D.int a[12]
答案:B
9.1.2 考点2:数组的初始化
数组初始化是指在数组说明时给数组元素赋予初值,因为初始化是在编译阶段进行的,所以相比运行时赋值,将减少运行时间,提高效率。一般格式如下:
<类型说明符> <数组名>[常量表达式] = {值,值……值};
例如:
int a[5] = {1, 2, 3, 4, 5}; // 把整形数组a中5个元素的初值依次初始化成1、2、3、4、5。
char str[10] = {'H' , 'e', 'l', 'l', 'o'}; // 把字符数组中的前五个元素依次初始化成H、e、l、l、o。
初始化数组需要注意以下几点。
① 可以只给部分元素赋初值。当“{}”中值的个数少于元素个数时,只给前面部分元素赋值。例如,“int a[10]={0,1,2,3,4};”表示只给a[0]~a[4]赋值,而后5个元素自动赋0值。不能赋值的数据个数多于数组的大小,否则编译器会报错。提倡给数组赋初值,这样会屏蔽由于编译器的不同对某些类型的元素自动赋值不一样的问题,达到程序是可控的目的。
② 只能给元素逐个赋值,不能给数组整体赋值。例如,给10个元素全部赋1值,只能写成“int a[10]={1,1,1,1,1,1,1,1,1,1};”,而不能写成“int a[10]=1;”。如下的程序都是错误的:
int a[10] = {1};
int b[10];
b = a;
如果我们想把数组a内元素一一对应赋给b内的元素,应使用以下方法:
for (int i = 0; i < 10; i++)
{
b[i] = a[i];
}
③ 如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。例如,“int a[5]={1,2,3,4,5};”可写为“int a[]={1,2,3,4,5};”。
例9.1.2 要定义一个有5个元素的一维数组vect,并使其各元素的初试值依次是30,50,-88,0和0,则下列要定义语句中错误的是( )。[2005年9月 选择第20题]
A.int vect[] = {30,50,-88} B.int vect[] = {30,50,-88,0,0}
C.int vect[5] = {30,50,-88} D.int vect[5] = {30,50,-88,0,0}
答案:A
解析:依据上面的规则,因为有5个元素,A中定义的只有三个元素,因为如果不给出数组的大小,就按照初始化数据的个数来确定其大小,所以A是不符合题目规定5个元素的一维数组,实际上它是3个元素大小;其他几个答案,都是正确的。
例9.1.3 要定义数组A,使得其中每个元素的数据依次为:3、9、4、8、0、0、0,错误的定义语句是( )。[2005年4月 选择第11题]
A.int A[] = {3, 9, 4, 8, 0, 0, 0}; B.int A[7] = {3, 9, 4, 8, 0, 0, 0};
C.int A[] = {3, 9, 4, 8}; D.int A[7] = {3, 9, 4, 8};
答案:C
9.1.3 考点3:数组的访问和多维数组
数组的访问,是通过数组名[下标]来单独对某个数组元素进行操作。C++中的数组下标是从0开始的,也就是说,比如定义了int a[5],那么其元素分别是a[0]、a[1]、a[2]、a[3]、a[4]。如果下标超过了(因为下标是从0开始的,因此包括等于)数组的大小,就是我们称为的数组越界,是C++里面最常出现的一个问题,在这种情况下程序将挂起或者引起系统死机,是很严重的一个错误,所以程序代码中应该判断下标的合法性,才去对数组元素进行操作。
关于多维数组,大纲要求了解,所以这里简要介绍,关于其细节,读者可以参考这方面的书籍。在实际问题中有很多变量是二维的或多维的,因此C++语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置。本节只介绍二维数组,多维数组可由二维数组类推得到。
本章节内容来自希赛全国计算机等级考试用书《计算机等级考试考点分析、题解与模拟——二级C++语言》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032460)