1.数组的概念
- 数组是有序数据的集合,要寻找数组中的某一个元素必须给出两个要素,数组名和下标。数组名和下标惟一的标识数组中的一个元素。
数组是有类型属性的。同一数组中的每个元素必须属于同一数据类型。一个数组在内存中占一片连续的存储单元。
如:有一个整型数组a,假设数组的起始地址为2000,则数组在内存中的存储情况为

引入数组就可减少变量的定义,使程序精炼。
- 用方括号表示下标,如:s[1],s[2]。
2.一维数组的定义和引用
- 数组是同一类型的一组值,在内存中顺序存放。
- 整个数组共用一个名字,其中每一项又称为一个元素。
定义方式
类型说明符 数组名[常量表达式];
- 例:
序号从0开始。其元素分别为:a[0]、a[1]、a[2]、a[3]。int a[4]; //表明数组由4个int型元素组成
- 例:
C++不允许对数组的大小作动态定义,即数组的大小不能是变量,必须是常量。
- 如要根据不同的数值改变数组的大小,可用常量表达式。
- 如:
#define SIZE 50 void main(void) { int art[SIZE]; ..... }
- 如:
一维数组元素的引用
- 数组必须先定义,具体引用时(赋值、运算、输出)其元素等同于变量。
- 例:
void main(void) { int i,a[10]; for(i=0;i<10;i--) a[i]=i; for(i=9;i>=0;i--) cout<<a[i]<<'\t'; cout<<"\n"; }
一维数组的初始化
- 在定义数组的同时给数组元素赋值。
注意:
对数组中的一部分元素列举初值,未赋值的部分是0。
int a[10] = {0,1,2,3,4,5}; int a[10] = {0,1,2,3,4,5,0,0,0,0};
不能给数组整体赋值,只能一个一个地赋值
int a[10]={0,1,2,....,9};//非法
可以用 int a[ ]={0,1,2,3,4,5}; 给数组赋值,编译器会自动计算出元素项数,并将数组定义为该长度。
- 用局部static或全局定义的数组不赋初值,系统均默认其为’\0’。即存储在静态数据区中的数组其元素默认为0.
例:求Fibonacci数列:1,1,2,3,5,8,……..的前20个数,即
F1=1 (n=1)
F2=1 (n=2)
Fn=Fn-1+Fn-2 (n>=3)
void main(void)
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<20;i++)
{ if(i%5==0) cout<<"\n";
cout<<f[i]<<'\t';
}
}
3.二维数组的定义和引用
- 定义方式
- 类型说明符 数组名[常量表达式] [常量表达式];
- 例: int a[3][4]; //表明a数组由3*4个int型元素组成,其元素分别为:a[0][0] ,a[0][1], a[0][2],a[0][3],a[1][0],a[1][1] ,a[1][2],a[1][3],a[1][0],a[2][0],a[2][1],a[2][2],a[2][3]。
若存放首地址为2000H,则在内存中为:
- 在内存中多维数组依然是直线顺序排列的,第一个元素位于最低地址处。
- 二维数组的引用
- 与一维数组一样,二维数组必须先定义,其维数必须是常量,具体引用时其元素等同于变量。
- 二维数组的初始化
分行赋值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//依次赋值
顺序赋值
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //依次赋值
部分赋值
int a[3][4] = {{1},{5},{9}}; //a[0][0]=1,a[1][0]=5,a[2][0]=9 其余元素为0
分行或全部赋值时,可以省略第一维,第二维不可省。
int a[][4] = {{1,2},{5,6,7,8},{9,10,11,12}};
不能给数组整体赋值,只能一个一个地赋值
int a[2][3] = {1,2,3,.....,12};
用static定义的数组不赋初值,系统均默认其为’\0’.
static int a[2][3];
- 例:有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号。
//打擂台法 max=a[0][0]; //使max开始时取a[0][0]的值 for (i=0;i<=2;i++) //从第0行到第2行 for (j=0;j<=3;j++) //从第0列到第3列 if (a[i][j]>max)//如果某元素大于max { max=a[i][j]; //max将取该元素的值 row=i; //记下该元素的行号i colum=j; //记下该元素的列号j } cout<<row<<‘\t’<<colum<<‘\t’<<max<<endl;