定义形式:
类型名 数组名 [行长度] [列长度];
例如:
int a [3] [2];
引用形式:
数组名 [行下标] [列下标]
例如:
a [0] [0];
1.分行赋初值
例如: int a [3] [3] = { {1,2,3} , {1,2,3} , {4,5,6} };
此时a数组中各元素为
1 | 2 | 3 |
1 | 3 | 3 |
4 | 5 | 6 |
也可以争对部分元素: static int a [3] [3] = { {1,2,3} , {} , {4,5,6} }; ——第一行元素都为0。
2.顺序赋初值
int a [3] [3] = { 1 , 2 , 3 , 1 , 2 , 3 , 4 , 5 , 6 }; 等价于
int a [3] [3] = { {1,2,3} , {1,2,3} , {4,5,6} };
还可以省略长度
int a [ ] [3] = { 1 , 2 , 3 , 1 , 2 , 3 , 4 , 5 , 6 }; 等价于
int a [3] [3] = { {1,2,3} , {1,2,3} , {4,5,6} };
将二维数组行下标和列下标分别作为循环变量,二重循环,可以遍历二维数组。
//例7-8
//定义一个二维数组a[i][j]=i+j
#include
int main()
{
int i,j;
int a[3][2];
for(i=0; i<3; i++)
for(j=0; j<2; j++)
a[i][j]=i+j;
for(i=0; i<3; i++){
for(j=0; j<2; j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
0 1
1 2
2 3
输出数组a 时,外循环是针对行下标的。
i j 第一次循环 0 0 a[0][0]=0 二 0 1 a[0][1]=1 三 1 0 a[1][0]=1 四 1 1 a[1][1]=2 五 2 0 a[2][0]=2 六 2 1 a[2][1]=3
//例7-9
//n*n的方阵转置
#include
int main()
{
int i,j,n,temp;
int a[6][6];
printf("Enter n: ");
scanf("%d",&n);
for(i=0; i
行列交换就是交换aqia[j]和a[j][i]
转置前:
1 2 3 4 5 6 7 8 9 转置后:
1 4 7 2 5 8 3 6 9