二维数组元素的表示形式为:
数组名[下标][下标]
例如: a[2][3]
下标可以是整型表达式,如 a[2-1][2*2-1]
不要写成 a[2,3],a[2-1,2*2-1]形式
数组元素可以出现在表达式中,也可以被赋值
例如:b[1][2]=a[2][3]/2
在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。
常出现的错误有:
int a[3][4]; /* 定义a为3×4的数组 */
┆
a[3][4]=3;
数据类型
数组名 [常量表达式1][常量表达式2]={ 初始化数据 };
可以用下面4种方法对二维数组初始化:
1.分行给二维数组赋初值。
例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
![167b0a975c7a985fc87cd4b4570ee931.png](https://i-blog.csdnimg.cn/blog_migrate/e015a95b04b5929e4e014e0c870867e6.jpeg)
4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等价于:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。
例如:int a[][4]={{0,0,3},{},{0,10}};
![dbdcd41fe2826a742f602fce27d5af4f.png](https://i-blog.csdnimg.cn/blog_migrate/4b2e2c82acca77fd37dffcb85e4471d2.jpeg)
二维数组程序举例
例1、将一个二维数组行和列元素互换,存到另一个二维数组中。
![7642ea57f9cd32e3ac4380723935020b.png](https://i-blog.csdnimg.cn/blog_migrate/28cebd1950986e68ff5667054f7b5f8d.jpeg)
#include
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf(″array a:\n″);
for (i=0;i<=1;i++)
{
for (j=0;j<=2;j++)
{
printf(″%5d″,a[i][j]);
b[j][i]=a[i][j];
}
printf(″\n″);
}
printf(″array b:\n″);
for (i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d″,b[i][j]);
printf(″\n″);
}
} /*程序结束*/
![ccc65edac24b147f208b5f86fa040180.png](https://i-blog.csdnimg.cn/blog_migrate/041a295a35c7a6879c693e7862a71920.jpeg)
例2: 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
![173549336cf7957784ed3447cd4e8c40.png](https://i-blog.csdnimg.cn/blog_migrate/4faa89bfcea4cd0dbf9c14a2400c6ac9.jpeg)
程序:
#include
void main()
{
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},
{-10,10,-5,2}};
max=a[0][0];
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
if (a[i][j]>max)
{ max=a[i][j];
row=i;
colum=j;
}
printf(″max=%d,row=%d,colum=%d\n″,
max,row,colum);
} /*程序结束*/