Hi,欢迎来到中国优发娱乐手机版高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养13年!
  • 全国咨询热线:400-611-6270
  • 新浪微博
  • 微信
  • 北京
    校区
  • 上海
    校区
  • 深圳
    校区
  • 成都
    校区
  • 南京
    校区
  • 武汉
    校区
  • 西安
    校区
  • 广州
    校区
  • 沈阳
    校区
  • 济南
    校区
  • 重庆
    校区
  • 长沙
    校区
  • 研发
    中心
  • 当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > 如何在C中动态分配二维数组
    如何在C中动态分配二维数组
    时间:2017-09-08作者:华清远见
    在C语言中如何动态申请连续的二维数组。可以采用多申请一些指针,然后这一些指针分别指向后面数据区中对应的位置,如一个3*4的int类型数组,我们先申请大小为sizeof(int*) * 3 + 3 * 4 * sizeof(int)的一维数组设为arr。然后arr[0]存放指向arr + sizeof(int*) * 3这个位置的指针,arr[1]存放指向arr + sizeof(int*) * 3 + 4 * sizeof(int)这个位置的指针, arr[2]存放指向arr + sizeof(int*) * 3 + 2 * 4 * sizeof(int)这个位置的指针。 即先通过malloc申请所有要使用的空间使之连续,再建立其之间联系形成二维数组。 1. //C语言中动态的申请二维数组 malloc free   2. #include <stdio.h>   3. #include <stdlib.h>   4. #include <string.h>   5. //动态申请二维数组   6. typedef int T   7. T** malloc_Array2D(int row, int col)   8. {   9.    int size = sizeof(T);   10.    int point_size = sizeof(T*);   11.    //先申请内存,其中point_size * row表示存放row个行指针   12.    T **arr = (T **) malloc(point_size * row + size * row * col);   13.    if (arr != NULL)   14.    {      15.        memset(arr, 0, point_size * row + size * row * col);   16.        T *head = (T*)((int)arr + point_size * row);   17.        while (row--)   18.            arr[row] = (T*)((int)head + row * col * size);   19.    }   20.    return (T**)arr;   21. }   22. //释放二维数组   23. void free_Aarray2D(void **arr)   24. {   25.    if (arr != NULL)   26.        free(arr);   27. }   28. int main()   29. {   30.    printf("  C语言中动态的申请二维数组 malloc free\n");     31.    printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");   32. 33.    printf("请输入行列(以空格分开): ");   34.    int nRow, nCol;   35.    scanf("%d %d", &nRow, &nCol);   36. 37.    //动态申请连续的二维数组   38.    T **p = malloc_Array2D (nRow, nCol);   39. 40.    //为二维数组赋值      41.    int i, j;      42.    for (i = 0; i < nRow; i++)   43.        for (j = 0; j < nCol; j++)   44.            p[i][j] = i + j;   45. 46.    //输出二维数组       47.    for (i = 0; i < nRow; i++)   48.    {   49.        for (j = 0; j < nCol; j++)   50.            printf("%4d ", p[i][j]);   51.        putchar('\n');   52.    }   53. 54.    free_Aarray2D((void**)p);   55.    return 0;   56.

    发表评论
    全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966 在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497) 企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300) Copyright 2004-2017 华清远见教育集团 版权所有 ,沪ICP备10038863号,京公海网安备110108001117号

    优发娱乐手机版

    百度360搜索搜狗搜索

    优发娱乐手机版

    百度360搜索搜狗搜索