数组是由一系列类型相同的元素构成。
它的定义格式是:
数据类型 数组名[ 常量表达式]
数据类型指明了数组中元素的类型,数组名可用标识符表示,[ ]方括号指明了数组中包含的元素数目。
给数组的元素赋初值,称为数组的初始化。初始化的方法是将数组元素的初值依次放在一对花括号当中,值与值之间用逗号分开。
1)对所有元素赋初值
int a[5]={0,1,2,3,4}
将0,1,2,3,4分别赋给a[0]、a[1]、a[2]、a[3]、a[4]。数组的开始都要从a[0]第0个元素开始。
2)部分元素赋初值
int a[10]={1,2,3,4,5,6}
当{}里的数值少于数值数目时,多余的数组元素被默认设置初值0。所以a[0]=1,a[1]=2......a[5]=6,a[6]=0,a[7]=0......a[9]=0。
例如下面的程序:
#include<stdio.h>
#define MON 12
int main()
{
int days[MON]={31,28,31,30,31,30,31,31,30,31,30,31};
int index;
for(index=0;index<MON;index++)
printf("Month %d has %2d days.\n",index+1,days[index]);
return 0;
}
二维数组
它的一般定义格式为:
数据类型 数组名[常量表达式1][常量表达式2]
数据类型和数组名的含义和一维数组相同,常量表达式1是说明二位数组的行数,常量表达式2说明每一行的列数。常量表达式1、2的值都必须是正整数。
例如:int a[2][3]; // 定义了一个2行3列的二维数组
二维数组的初始化
1)以数组中的行为单位,分行对数组所有元素赋初值。
例如: int a[2][3]={{1,2,3},{4,5,6}};
第一个花括号{1,2,3}依次赋给第0行的元素a[0][0]、a[0][1]、a[0][2];把第2个花括号{4,5,6}依次赋给数组a第一行的元素a[1][0]、a[1][1]、a[1][2]。
2)以不分行的方式按数组元素的排列顺序依次列出各个元素的值,并用一个花括号括起来。
例如:int a[2][3]={1,2,3,4,5,6};
同样,a[0][0]=1,a[0][1]=2......a[1][2]=6。
3)只对部分元素赋初值。一种是以行为单位,依次列出部分元素的值。
例如: int a[3][4]={{1,2},{0,1,3},{4,5,6}};
没有明确说明的列出初值的元素,默认初值为0。即等同于
int a[3][4]={{1,2,0,0},{0,1,3,0},{4,5,6,0}};
另一种是以数组元素的排列顺序依次列出前面部分元素的值。
例如: int a[3][4]={0,1,2,3,4,5};
即a[0][0]=0,a[0][1]=1,a[0][2]=2,a[0][3]=3,a[1][0]=4,a[1][1]=5,a[1][2]=0,a[1][3]=0.......a[2][3]=0。
4)可以根据给出的初始化的数据,自动确定数组的行数。
例如:int a[ ][4]={{1,2,3},{3,4,5,6},{7,0,9,7}{4,5,2}}; //这里定义了一个4行4列的二维数组。
ps:二维数组初始化时,不能省略列数,原因是二维数组按行存储,列必须确定。
#include <stdio.h>
int main(void)
{
int a[3][4]={{3,1,5,4},{7,9,8,1},{1,5,7,9}};
int i,j;
for( i=0;i<3;i++)
{ for(j=0;j<4;j++)
printf("%-2d",a[i][j]);
printf("\n");
}
return 0;
}
输出结果如下:
3 1 5 4
7 9 8 1
1 5 7 9
定义多维数组时,对数组的维数没有限制。
例如:int a[2][5][6]; //定义了一个三维数组
int a[2][5][8][8][9]; //定义了一个五维数组
......
前面关于二维数组的初始化同样适用于更多维的数组。