分析两种动态分配二位数组的方法,其原理一致。
0. 动态分配一维数组int a[rows]
#include <stdlib.h>
int main{void}
{
...
int *a = (int *)malloc(rows * sizeof(int));//分配一段内存,存放rows个int型的数据
...
}
1. 动态分配内容不一定连续的二维数组a[rows][columns]
#include <stdlib.h>
int main{void}
{
...
int **a = (int **)malloc(rows * sizeof(int *));//分配一个指针数组有rows个元素,数组的每一个元素是一个数组指针
for(i = 0;i < rows; i++)
{
a[i] = (int *)malloc(columns * sizeof(int));//为每数组指针分配columns个存放int型数据的内存
}
...
}
2. 分配连续的二维数组a[rows][columns]
#include <stdlib.h>
int main{void}
{
...
int **a = (int **)malloc(rows * sizeof(int *));//分配一个指针数组有rows个元素,数组的每一个元素是一个数组指针
a[0] = (int *)malloc(rows * columns * sizeof(int));//分配存放rows * columns个int型数据的数组,a[0]加1则移动1个int型数据的空间,此处a[0]表示int型数据的地址
for(i = 1;i < rows; i++)
{
a[i] = a[0] + i * columns;//每行有columns个int型元素,所以rows每加1,地址加i * columns
}
...
}