C语言动态创建一维数组只需使用malloc或者calloc就可以,但是动态创建二维数组就复杂得多。那么,要怎样才能动态创建二维数组呢?
一、创建非连续空间的动态二维数组
二维数组可以看作是由许多行组成的,每一行都是一个一维数组。首先创建一个一维的指针数组,然后为该指针数组中的每个指针再创建一个一维数组,这样就动态创建一个二维数组了。。实现代码如下:
#include <stdio.h> #include <stdlib.h> #define ROWS 20 /* 二维数组行数 */ #define COLS 10 /* 二维数组列数 */ int main(void) { int **p; int i, j; /* 开辟二维数组空间 */ p = malloc(ROWS * sizeof(int *)); for(i = 0; i < ROWS; i++) { p[i] = malloc(COLS * sizeof(int)); } /* 初始化二维数组 */ for(i = 0; i < ROWS; i++) { for(j = 0; j < COLS; j++) { p[i][j] = COLS * i + j + 100; } } /* 打印二维数组 */ for(i = 0; i < ROWS; i++) { for(j = 0; j < COLS; j++) { printf("%d\t", p[i][j]); } printf("\n"); } /* 释放二维数组空间 */ for (i = 0; i < m; i++) { free(p[i]); } free(p); return 0; }
二、创建连续空间的动态二维数组
动态申请固定大小的二维数组,一次性动态创建。实现代码如下:
#include <stdio.h> #include <stdlib.h> #define ROWS 20 /* 二维数组行数 */ #define COLS 10 /* 二维数组列数 */ int main(void) { int (*p)[COLS]; int i, j; /* 开辟二维数组空间 */ p = malloc(ROWS * COLS * sizeof(int)); /* 初始化二维数组 */ for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { p[i][j] = COLS * i + j + 100; } } /* 打印二维数组 */ for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { printf("%d\t", p[i][j]); } printf("\n"); } /* 释放二维数组空间 */ free(p); return 0; }