分析兩種動态配置設定二位數組的方法,其原理一緻。
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
}
...
}