美文网首页
malloc函数申请二维动态数组(C)

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

作者: heyzqq | 来源:发表于2018-01-17 19:27 被阅读0次

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

相关文章

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

    1. 创建一维动态数组 2. 创建二维动态数组 创建一个动态指针数组:p, 包含两个指针(eg.pstr[2][1...

  • C语言(四-链表)

    链表 因为数组必须事先确定大小,不能实现动态申请、释放。而使用malloc动态内存分配也无法实现,malloc申请...

  • new和malloc的区别

    new和malloc都用于动态申请内存 从本质上来说,malloc是C中的函数,需要声明特定的头文件。而new是C...

  • c++动态分配浅析

    1. c语言中动态分配和释放. 在c中,申请动态内存是使用malloc和free,这两个函数是c的标准库函数,分配...

  • new/delete 和 malloc/free 的区别

    1.malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态...

  • malloc和new的区别

    1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态...

  • malloc和new的区别是什么?

    malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存...

  • [C++之旅] 6 内存的申请和释放

    [C++之旅] 6 内存的申请和释放 申请内存的方式 C语言方式 申请内存使用函数void *malloc(siz...

  • C++ new 和 delete 运算符

    在 C 语言中,动态分配内存用 malloc () 函数,释放内存用 free () 函数。如下所示: 在 C++...

  • 2017年10月18日学习总结

    今天学习的是指针传函和动态申请,在使用动态申请时申请后一定要判断是否申请成功了,还学习了malloc函数和free...

网友评论

      本文标题:malloc函数申请二维动态数组(C)

      本文链接:https://www.haomeiwen.com/subject/bdnuoxtx.html