1,定义:语法: 类型 数组名[大小][大小]
如: int a[2][3]
2,二维数组在内存的存在形式,各个元素的地址是连续分布的,即在前一个元素基础上加4(int 字节)
1 void main() { 2 int a[5][6]; //没有初始化,则是分配的内存垃圾值 3 4 //全部初始化为0 5 for (int i = 0;i < 5;i++) { 6 for (int j = 0;j < 6;j++) { 7 a[i][j] = 0; 8 } 9 } 10 11 a[1][2] = 1; 12 a[2][1] = 2; 13 a[2][3] = 3; 14 15 //输出二维数组 16 for (int i = 0;i < 5;i++) { 17 for (int j = 0;j < 6;j++) { 18 printf("%d ", a[i][j]); 19 } 20 printf("\n"); 21 } 22 23 //查看二维数组的布局 24 printf("二维数组的首地址:%p\n", a); 25 printf("二维数组的首地址:%p\n", a[0]); 26 printf("二维数组的首地址:%p\n", &a[0][0]); 27 28 //将二维数组各个元素的地址输出 29 for (int i = 0;i < 5;i++) { 30 for (int j = 0;j < 6;j++) { 31 printf("a[%d][%d]的地址=%p ", i, j, &a[i][j]); 32 } 33 printf("\n"); 34 } 35 }
3,二维数组的内存布局图
4,二维数组直接初始化
①类型 数组名[大小][大小] = { {值1,值2......} , {值1,值2.......} , {值1,值2.........} }
②类型 数组名[大小][大小]= { 值1,值2,值3,值4,值5,值6........}
5,请使用灵活的方式遍历如下数组:并得到和
int map[3][3] = { {0,0,1} , {1,1,1} , {1,1,3 } } ;
1 void main() { 2 int map[3][3] = { {0,0,1},{1,1,1},{1,1,3} }; 3 4 //1,先得到行 5 int rows = sizeof(map) / sizeof(map[0]); 6 7 //2,得到列 8 int cols = sizeof(map[0]) / sizeof(int); 9 10 int sum = 0; 11 for (int i = 0;i < rows;i++) { 12 for (int j = 0;j < cols;j++) { 13 printf("%d ", map[i][j]); 14 sum += map[i][j]; 15 } 16 printf("\n"); 17 } 18 printf("sum=%d\n", sum); 19 }
6,二维数组细节
①可以只对部分元素赋值,未赋值的元素自动取“零”值,
②如果对全部元素赋值,那么第一维的长度可以不给出
③二维数组可以看作是由一维数组嵌套而成的,如果一个数组的每个元素又是一个数组,那么它就是二维数组。
二维数组 a[3][4] 可以看作三个一维数组,他们的数组名分别为 a[0] a[1] a[2] ,这三个一维数组都有4个元素
原文:https://www.cnblogs.com/shanlu0000/p/12359814.html