malloc函数申请二维动态数组(C)

2018-01-17  本文已影响0人  heyzqq

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

上一篇 下一篇

猜你喜欢

热点阅读