二维数组的定义
1.类型 数组名[常量表达式][常量表达式],注:只有第一维可以不写常量,后面必须要加上。
int a[6][6]; 6行6列
char b[4][5]; 4行5列
double c[6][3]; 6行3列
int b[4][5];
2.二维数组的访问
数组名[下标][下标]
a[0][0]; //访问a数组中第1行第1列的元素
•同样需要注意下标的取值范围,以防止数组的越界访问。
比如int a[3][4]; 其“行下标”的取值范围是0~2,“列下标”的取值范围为0~3,超出任何一个下标的访问都是越界访问。
3.声明与初始化二维数组
(1).完整声明,完整初始化:int x[3][2]={1,2,3,4,5,6};
(2)不完整声明,完整初始化:int x[][2]={{1,2},{3,4},{5,6}};
(3)完整声明,不完整初始化:int x[3][4]={0};
C99同样增加了一种新特性;指定初始化的元素,可以对数组中某些指定元素进行初始化赋值,其他元素则被初始化为0;
int a[3][4]={[0][0]=1, [1][1]=2, [2][2]=3 };
#include <stdio.h> int main() { int a[4][5] = { {80, 92, 85, 86, 99}, {78, 65, 89, 70, 99}, {67, 78, 76, 89, 99}, {88, 68, 98, 90, 99} }; int i, j; for (i = 0; i < 5; i++) { for(j = 0; j < 4; j++) { printf("%d ", a[j][i]); } printf(" "); } return 0; }
#include <stdio.h> int main() { int array[4][5] = {0}; int i, j, k = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { array[i][j] = k++; } } printf("*(array+1): %p ", *(array + 1)); printf("array[1]: %p ", array[1]); printf("&array[1][0]: %p ", &array[1][0]); printf("**(array+1): %d ", **(array+1)); return 0; }
#include <stdio.h> int main() { int array[2][3] = {{0, 1, 2}, {3, 4, 5}}; int (*p)[3] = array; printf("**(p+1): %d ", **(p+1)); printf("**(array+1): %d ", **(array+1)); printf("array[1][0]: %d ", array[1][0]); printf("*(*(p+1)+2): %d ", *(*(p+1)+2)); printf("*(*(array+1)+2): %d ", *(*(array+1)+2)); printf("array[1][2]: %d ", array[1][2]); return 0; }
4.结论
*(array+i)==array[i];
*(*(array+i)+j)==array[i][j];
*(*(*(array+i)+j)+k)==array[i][j][k];