
<元素类型关键字> <二维数组名> [<常量表达式1>] [<常量表达式2>]
[={{<子列表1>},{子列表2},...}];
例如: int a[2][4];
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中的元素总数:行数×列数=2*4=8。
二维数组a的存储空间大小:元素类型长度×行数×列数=4*2*4=32
进行二维数组存储空间分配,是先按照行下标从小到大次序,再按照列下标从小到到次序。
如double c[3][4];
元素数:3*4=12,存储字节数:8*12=96,字节编号范围:0-95。
二维数组中任一元素的开始字节地址的计算公式:
address(d[i][j])=sizeof(<元素类型>)*(i*<列总数>+j) //d是数组名
如address(c[1][3])= sizeof(double)*(1*4+3)=8*7=56
(1) int a[3][3];
(2) double b[M][N];
(3) int c[2][3]={{1,3,5},{2,4,6}};
(4) int d[M-1][M+1]={{0}};
(5) int e[4][5]={{0},{1,2}};
(6) char g[10],h[10][5];
元素的表示:<数组名>[<行下标表达式>][<列下标表达式>]
例如:
int a[4][5];
a[1][2]=6;
a[2][2]=3*a[1][2]+1; // a[2][2]=19
printf("%d\n",a[i][j]);
printf("%d\n",a[i++][j++]);
二维数组的遍历就是依次访问数组中的每个元素。
对二维数组的遍历,需要采用双重循环,外循环按行下标从小到大,内循环按列下标从小到大,在内循环体中依次访问每个元素。
int i,j,s=0,a[M][N];
for(i=0; i<M; i++)
for(j=0; j<N; j++) s+=a[i][j];
printf("s=%d\n", s);
#define M 3
#define N 3
a[M][N]= {{2,3,4,},{5,6,7},{4,6,8}};
//s=2+3+4+5+6+7+4+6+8=45
#include <stdio.h>
void main()
{ int b[2][3]={{7,15,5},{4,6,8}};
int i,j,min=b[0][0];
for(i=0; i<2; i++)
for(j=0; j<3; j++)
if(b[i][j]<min) min=b[i][j];
printf("%d\n",min);
}
程序功能:从数组b[2][3]中求出所有元素的最小值并输出。
#include <stdio.h>
void main()
{ int d[3][3]={{1,5},{3,2},{6,7}};
int i,j;
for(i=0; i<3; i++) {
for(j=0;j<2;j++) d[i][2]+=d[i][j];
}
for(i=0;i<3;i++) printf("%d ",d[i][2]);
} //6 5 13
程序功能:利用d中每行最后一个元素累加前面同行所有元素值,并输出。