动态多维数组

1.动态多维数组的创建

动态多维数组的创建可以节约空间, 避免不必要的空间浪费。
例子:
用C语言创建一个二维数组

// 用数组指针
//方法一
char (*a)[N];//指向一个含有N个元素的一维数组的指针
a = (char (*)[N])malloc(sizeof(char [N]) * m); // 给指针扩容
free(a);

//方法二
char **a;
a = (char**)malloc(sizeof(char*) * m);
for(int i = 0; i < m; i++)
    a[i] = (char*)malloc(sizeof(int*)*N)
for(int j = 0; j < m; j++)
    free(a[i]);
free(a);

方法三
char **a;
a = (char**)malloc(sizeof(char*) * m);
a[0] = (char*)malloc(sizeof(char) * m * n) // 一次性开辟所有空间
for(int i = 1; i < m; i++)
    a[i] = a[i - 1] + n;
free(a[0]);
free(a);

//运用指针数组
//方法一
char* a[M];
for(int i = 0; i < M; i++)
    a[i] = malloc(sizeof(char) * n);
for(int i = 0; i < M; i++)
    free(a[i]);
//方法二
char* a[M];
a[0] = (char*)malloc(sizeof(char) * M * n);
for(int i = 1; i < M; i++)
    a[i] = a[i - 1] + n;
free(a[0]);

用C++

//方法一
char (*a)[N];
a = new char[m][N];
delete[] a;
//方法二
cin >> n;
int **a = NULL;
a = new int*[n];
for (int i = 0; i < n; i++)
    a[i] = new int[4];
for(int i = 0; i < n; i++)
    delete[] a[i];
delete[] a;
//指针数组的内存分配和释放  
//方法一  
char **a;  
a = new char* [m];  
a[0] = new char[m * n];//一次性分配所有空间  
for(int i=1; i<m; i++)  
    a[i] = a[i-1] + n;//分配每个指针所指向的数组  

delete[] a[0];  
delete[] a;   

//方法二  
char* a[M];//指针的数组  
for(int i=0; i<M; i++)  
   a[i] = new char[n];  

for(i=0; i<M; i++)  
       delete[] a[i];   

//方法三  
char* a[M];//指针的数组  
a[0] = new char[M*n];  
for(int i=1; i<M; i++)  
    a[i] = a[i-1] + n;  

delete[] a[0];  

如果是三维、四维和二维一样也就一层一层的创建,把房间一个一个填满东西就行。