49 多维数组(二维数组)

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("
");
21     }
22 
23     //查看二维数组的布局
24     printf("二维数组的首地址:%p
", a);
25     printf("二维数组的首地址:%p
", a[0]);
26     printf("二维数组的首地址:%p
", &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("
");
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("
");
17     }
18     printf("sum=%d
", sum);
19 }

 6,二维数组细节

  ①可以只对部分元素赋值,未赋值的元素自动取“零”值,

    

       

   ②如果对全部元素赋值,那么第一维的长度可以不给出

  ③二维数组可以看作是由一维数组嵌套而成的,如果一个数组的每个元素又是一个数组,那么它就是二维数组。

    二维数组 a[3][4] 可以看作三个一维数组,他们的数组名分别为 a[0]  a[1]  a[2] ,这三个一维数组都有4个元素

  

原文地址:https://www.cnblogs.com/shanlu0000/p/12359814.html