1. 创建一维动态数组
// 创建一个数组,含 5 个 char 大小的空间
char * p=(char *)malloc(sizeof(char)*5);
//使用就和简单的数组一样就可以了
p[0] = 'z';
// 释放只需要一次
free(p);
p = NULL;
2. 创建二维动态数组
创建一个动态指针数组:p, 包含两个指针(eg.pstr[2][16])
// p ──── p[0] ==> [0,0,...,0] (大小为16的字符数组)
// └── p[1] ==> [0,0,...,0]
1) 第一种方式
分配和释放都比较麻烦:
// 创建 p 指针,一个大小为 两个指向char型的指针 的二级指针;
char **p = (char **)malloc(sizeof(char *) * 2);
// 然后,为每个char型指针分配空间
for (int i = 0; i < 2; ++i){
p[i] = (char *)malloc(sizeof(char) * 16);
}
// p ---- p[0] ==> [0,0,...,0] (大小为16的字符数组)
// |__ p[1] ==> [0,0,...,0]
// ^ ^
// 需要释放 |____________|
// 需要释放两次.
for (int i = 0; i < 2; ++i){
free(p[i]);
}
free(p);
p = NULL;
2) 第二种方式
第二种直接申请,数组大小比较不灵活,但是快:
// 相当于分配了 16*2 ,然后强制转化为每 16 为一组,共两组
char (*p)[16]=(char(*)[16])malloc(sizeof(char)*16*2);
// 释放就和一维的一样
free(p);
p = NULL;
[reference]
[1] 赵子苍. C语言用malloc函数申请二维动态数组[M]. (2014年04月18日 20:15:20) http://blog.csdn.net/zhaozicang/article/details/24043279