当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 >
如何在C中动态分配二维数组
时间:2018-09-29作者:华清远见

在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-2018 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号