|
数组类型
数组是一种简单的数据结构,它描述的是一组相同数据类型元素的集合。在内存中,数组是连续存储的。数组按维数划分,可以分为一维数组、二维数组和多维数组。其中,一维数组的定义格式为: 数组类型 数组名称[数组长度]; 下面的语句定义了一个包含5个元素的一维整型数组。 int nArray[5]; 为了使用数组,需要访问数组中的元素。程序中可以通过元素在数组中的位置来访问,这被称之为索引访问或下标访问。下面的语句用于访问数组中的第2个元素。 nArray[1] = 10; 数组的访问是通过数组名和下标来实现的。在C++中数组的下标是从0开始的,以数组nArray为例,其下标范围为0…4,其中下标0表示第一个数组元素,下标1表示第2个数组元素…。如果使用下标5来访问数组,将会出现数组访问越界,因为下标5表示访问数组中的第6个元素,而nArray只包含5个元素。数组访问越界是一件非常危险的事情,在开发程序时应避免出现数组访问越界的情况,C++编译器不能够发现数组访问越界的错误。 在定义数组时,数组维数指定了数组中包含的元素数量,也就是所说的数组长度。数组维数必须大于等于1,并且必须是一个常量表达式,即在编译时就能够计算出它的值。下面的数组定义是合法的。 const int nSize = 5; //定义一个整型常量 int nArray[nSize]; //合法的数组定义 而下面的数组定义是非法的。 int nSize = 5; //定义整型变量 int nArray[nSize]; //非法的数组定义 因为数组维数必须是常量表达式,而变量nSize只能在程序执行到其定义时才能确定大小。 与定义变量类似,定义数组时也可以直接进行初始化。例如,下面的语句在定义数组nArray时为其进行了初始化。 int nArray[5] = {4, 5, 8, 6, 9}; //定义数组并进行初始化 在为数组进行初始化时也可以只对数组的部分元素进行初始化。例如数组nArray包含5个元素,只对前4个元素进行初始化。 int nArray[5] = {4, 5, 8, 6}; //对数组部分元素进行初始化 如果数组中包含5个元素,而我们在初始化时提供了6个元素,这将导致编译错误,提示太多的初始化。例如: int nArray[5] = {4, 5, 8, 6, 9, 10}; //错误的定义 在定义数组时如果显示地提供初始值,则可以不指定数组的长度。例如: int nArray[] = {4, 5, 8, 6, 9}; //不指定数组长度 此时,数组nArray的长度为5。 在定义数组时如果需要将数组中的所有元素初始化为0,可以简写为如下的形式。 int nArray[5]= {0}; 在对数组进行初始化时,如果只对部分元素进行了初始化,则不初始化的元素默认为0。因此下面的语句将数组nArray中的第一元素初始化为1,其他元素为0,而不是将所有的元素初始化为1。 int nArray[5]= {1}; 在介绍完一维数组,接下来介绍二维数组。在C++中二维数组的定义格式为: 数组类型 数组名[常量表达式][常量表达式]; 下面的语句定义了一个二维整型数组。 int nArray[3][4]; //定义一个二维数组 与一维数组相同,二维数组也是通过数组名和下标来访问的,只是数组的下标有两个。例如,下面的语句访问了二维数组中的元素。 nArray[1][2] = 100; //访问二维数组元素 在二维数组中,第一维称为行维,第2维称为列维,这样二维数组nArray有3行,每行有4个元素,共计有12个元素。对于二维数组来说,可以将第一维nArray[3]中的每一个元素认为是一个数组,包含4个元素,如图1所示。 ![]() 图1 二维数组示意图 在定义二维数组时也可以为数组元素进行初始化。例如,下面的语句用于为二维数组nArray进行初始化。 int nArray[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; 也可以使用一个大括号初始化二维数组的所有元素。例如: int nArray[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12 }; 但是,该方法并不提倡。如果数组元素过多的话,很难界定每一个元素。与一维数组类似,二维数组也可以只对部分元素进行初始化。例如: int nArray[3][4]; = { {1},{2},{3} }; 结果是对每一行第一个元素赋值,其他元素为0。 在定义二维数组时,如果需要提供全部元素的初始值,可以省略第一维的长度,但是不能省略第二维的长度。例如: int nArray[][4] = {1,2,3,4,5,6,7,8,9,10,11, 12}; int nArray[][4] = {1,2,3,4,5,6,7,8,9,10,11}; 注意:最后一行代码,只提供了11个元素的初始值,但是数组nArray却包含12个元素,最后一个元素被初始化为0。 |