数组是一些相同类型的对象的集合,这些对象具有一定的顺序关系,在逻辑上是连续的,在内存中的存储上也是连续的。这些组成数组的对象叫做这个数组的元素。
数组元素用数组名加带方括号的下标表示,比如,a[2]。数组元素具有相同的类型,可以是除void之外的任意一种类型。
数组跟结构体、类等一样也是自定义数据类型,所以使用以前也需要先进行声明。
声明数组的时候要明确以下三点:
1.确定数组名称;
2.确定数组元素的类型;
3.确定数组的维数及每维的大小。
数组的声明形式为:数据类型 标识符[常量表达式1][常量表达式2]...;
。
数据类型规定了数据元素的类型,可以是整型、浮点型等基本数据类型,还可以是结构体、类等自定义数据类型。
标识符指定了数组的名称,记住,数组名是一个常量,代表着数组元素集合在内存存储的起始地址,不能进行自增自减运算。
“常量表达式1”、“常量表达式2”、…叫做下标表达式,必须是正整数。这些下标确定了数组元素的个数及每个元素在数组中的位置。
一个数组可能有多个下标,下标的个数就是数组的维数,有n个下标的数组叫做n维数组。而每个下标表达式表示该维的下标个数也就是该维的元素个数。数组元素的总个数是各个下标表达式的乘积。
还要跟大家强调下标上界和下标下界的概念,数组每一维的下标的下界是0,上界是该下标所在维的元素个数减1。
例如:int a[5];
表示a是一个一维整型数组,有5个元素,下标下界是0,上界是5-1=4,所以这5个元素为a[0]…a[4],可以用来存放5个整数序列。
int b[2][3];
表示b是一个二维整型数组,其中第一维有2个下标(0,1),第二维有3个下标(0,1,2)。数组元素的个数是6,可以用来存放2行3列的整数表格。对于数组b,第一个元素是b[0][0],最后一个元素是b[1][2]。
我们在使用数组时,只能分别访问数组的各个元素。访问哪个元素是由数组名和下标来决定的。
数组元素的引用形式为:数组名[下标表达式1][下标表达式2]...;
。
这里下标表达式的个数要看数组的维数,n维数组就需要n个下标表达式。
实际上,数组的每一个元素都能看成是一个同类型的变量来使用,对整型变量的操作同样也可以用于整型数组的每个元素,对类的对象的操作也同样可用于类类型的数组的每个元素。
在使用数组时要注意:
1.引用数组元素时的下标表达式可以是任意合法的算术表达式,但是结果必须是整型数据;
2.引用数组元素时的下标表达式不能超过声明数组时规定的上下界,否则会出现数组越界的问题。
给大家一个数组声明和使用的例子:
#include
using namespace std;
int main()
{
int a[5];
int b[5];
int i;
for(i=0; i<5; i++)
{
a[i] = i*2;
b[5-i-1] = a[i];
}
for(i=0; i<5; i++)
{
cout << "a[" << i << "]=" << a[i];
cout << " b[" << i << "]=" << b[i] << endl;
}
return 0;
}
上面的程序中声明了两个一维整型数组a和b,都有5个元素,用for循环对它们进行赋值,在引用b的元素时使用了算术表达式作为下标。
for循环中把0,2,4,6,8分别赋值给a[0]…a[4],而b的各元素恰好是a中各元素的逆序排列,即8,6,4,2,0。在这个程序中如果我们用了表达式a[5]或b[5]或者下标更大,就会有数组越界的错误。这是编程入门时非常容易犯的错误,希望大家一定注意。
如果没有数组,上面的a[5]和b[5]就需要一共定义10个变量,输出时也要写10条语句,如果有更复杂的运算那程序的复杂度可想而知,有了数组我们就可以用循环结构来简单的处理这类问题。