一、二维数组
1、定义
形式:类型说明符 数组名【常量表达式(行数)】【常量表达式(列数)】
其中行数可被省略,列数不能被省略。
2、引用
数组名 【下标】【下标】
3、初始化
例如:通过for循环,用k++实现对 a[3][4] 的赋值;再对二维数组进行遍历。
直接对二维数组赋初值:
二维数组是特殊的一维数组,例如a[x][y],实质上有x个元素,每个元素都是一个一维数组,数组名分别为a[0]、a[1]...a[x-1],每个元素中包含y个长度。
二维数组在内存中是如何存储的?
由于内存是线性的,因此尽管二维数组是以行×列的形式定义,在内存中依旧线性排列。
例如:int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12},其中a[0][0]占4个字节,小端序存储为01 00 00 00;依次向后直到0d 00 00 00 结束。该二维数组sizeof(a) = 4字节 × 3行 × 4列 = 48字节;每16字节为一个一维数组元素;每4字节为一个一维数组中所包含的一个元素。
4、说明
二维数组中:a(整个数组),a[0](整个数组中的第一个一维数组),&a[0][0](整个数组中的首元素取地址) 表示的都是数组的首元素地址,是相同地址;只是指针有所不同。
一维数组中: a(整个数组)与 &a[0] (整个数组中的首元素取地址)。
二、二维数组可应用于图像的处理
1、求出二维数组中的边缘信息之和。
2、图像的垂直镜像
从中间对半,进行交换,再遍历。
![](https://i-blog.csdnimg.cn/direct/a3501643cc04402e8fc75b857ec3300f.png)
3、三阶魔方阵
每一行、每一列以及对角线之和均相等。
4、极值
用strcmp函数对二维数组中的一维数组元素进行比较。
5、逆序
定义的中间交换量为一个数组t[100]。用strcpy进行一维数组拷贝。
6、二分查找法
先对二维数组进行排序,再二分法查找。