8.二维数组那点事.md 2.5 KB
Newer Older
极客江南's avatar
极客江南 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
## 二维数组

- 所谓二维数组就是一个一维数组的每个元素又被声明为一 维数组,从而构成二维数组. 可以说二维数组是特殊的一维数组。
- 示例: 

+ int a[2][3] = { {80,75,92}, {61,65,71}};
+ 可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素 
  ![](https://img-blog.csdnimg.cn/img_convert/c716d53c6b228ea211a524645a5d13a5.png)

## 二维数组的定义

- 格式:

+ 数据类型 数组名[一维数组的个数][一维数组的元素个数]
+ 其中"一维数组的个数"表示当前二维数组中包含多少个一维数组
+ 其中"一维数组的元素个数"表示当前前二维数组中每个一维数组元素的个数

---

## 二维数组的初始化

- 二维数的初始化可分为两种:

+ 定义的同时初始化
+ 先定义后初始化

- 定义的同时初始化

```c
int a[2][3]={ {80,75,92}, {61,65,71}};
```

- 先定义后初始化

```c
int a[2][3];
a[0][0] = 80;
a[0][1] = 75;
a[0][2] = 92;
a[1][0] = 61;
a[1][1] = 65;
a[1][2] = 71;
```

- 按行分段赋值

```c
int a[2][3]={ {80,75,92}, {61,65,71}};
```

- 按行连续赋值

```c
int a[2][3]={ 80,75,92,61,65,71};
```

- 其它写法

+ 完全初始化,可以省略第一维的长度

```c
int a[][3]={{1,2,3},{4,5,6}};int a[][3]={1,2,3,4,5,6};
```

   + 部分初始化,可以省略第一维的长度

```c
int a[][3]={{1},{4,5}};int a[][3]={1,2,3,4};
```

>+ 注意: 有些人可能想不明白,为什么可以省略行数,但不可以省略列数。也有人可能会问,可不可以只指定行数,但是省略列数?其实这个问题很简单,如果我们这样写:
>  int a[2][] = {1, 2, 3, 4, 5, 6}; // 错误写法
>   大家都知道,二维数组会先存放第1行的元素,由于不确定列数,也就是不确定第1行要存放多少个元素,所以这里会产生很多种情况,可能1、2是属于第1行的,也可能1、2、3、4是第一行的,甚至1、2、3、4、5、6全部都是属于第1行的

+ 指定元素的初始化

```c
int a[2][3]={[1][2]=10};int a[2][3]={[1]={1,2,3}}
```

## 二维数组的应用场景

![](https://img-blog.csdnimg.cn/img_convert/f351a6ed231c8a1a5e6379da6816fd1c.png)
![](https://img-blog.csdnimg.cn/img_convert/dd8a18bdb49031d24c98bc311e80ab78.png)
![](https://img-blog.csdnimg.cn/img_convert/dee64b6cb0f5c043402880d0062d2393.png)



最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。

开源不易,码字不易,如果觉得有价值,欢迎分享支持。