美文网首页
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)

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