叠甲:作者是大一计算机类新生,有知识点错误劳烦及时提出,有错必改
本文包含如何定义不连续的二维数组和连续的二维数组
铺垫:![](https://img-blog.csdnimg.cn/6119a79a448c4025b4b84fcd1fcd31f4.jpeg)
不连续的可变二维数组:
#include<stdio.h>
#include<stdlib.h>
//可变二维数组的本质是一个指针数组
int main() {
int i, j, line = 5, column = 2; //欲定义数组长度为 5行2列
int** p; //定义二位数组的首地址(首地址为二级指针)
p = (int **)malloc(sizeof(int *) * line); //给行指针分配内存空间
for (i = 0; i < line; i++) {
p[i] = (int*)malloc(sizeof(int) * column); //给每个行指针后面分配2个int的空间作为列
}
.........
连续的可变二维数组:
int main() {
int i, j, line=5,column=2; //欲定义数组长度为 5行2列
int ** p; //定义二位数组的首地址(首地址为二级指针)
p = (int**)malloc(sizeof(int*) * line); //给行指针分配内存空间
p[0] = (int*)malloc(sizeof(int) * line * column); //从第一行第一列那个地址开始往后分配 行*列 个int单位的内存空间(一整块)
for (i = 1; i < line; i++)
{
p[i] = p[i - 1] + column; /*--最关键的地方-- 遍历行指针(第n行的第一列)将n - 1行的第一列的地址
加上列数*int单位的内存空间得到新的行指针*/
}
......
连续的可变二维数组相对于不连续的可变二维数组来说,关键思想在于
从:多次分配地址不连续的地址
到:一次分配所需的所有地址,再通过循环结构把一整块内存“切开”再分配给“每一行”