如何在C中动态分配二维数组

这篇具有很好参考价值的文章主要介绍了如何在C中动态分配二维数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在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( //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. }

对嵌入式物联网感兴趣的小伙伴,可以多了解一下相关信息。(看过来)

 

如何在C中动态分配二维数组文章来源地址https://www.toymoban.com/news/detail-427023.html

到了这里,关于如何在C中动态分配二维数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从二维数组到一维数组——探索01背包问题的动态规划优化

    本文将继续上一篇博客爬楼梯之后继续讲解同样用到了动态规划的 01背包问题 在解决动态规划问题时,我们经常面临着空间复杂度的挑战。01背包问题是一个典型的例子,通常使用二维数组来表示状态转移,但这样会带来额外的空间开销。在本文中,我们将探讨如何通过优化

    2024年04月11日
    浏览(59)
  • JNA调用C++动态库,返回二维数组

    JNA/JNI封装,C++开发交流,  showcode1024 1.下载eclipse创建一个项目,jdk选择1.8的版本,更高的需要配置下 动态库编译后放到system32下,system下是64位的,SysWow64是32位的

    2024年01月19日
    浏览(41)
  • 如何理解Go言中的Context?

    目前看过除了《go语言程序设计》以外最好的教程:https://www.practical-go-lessons.com 原文:https://www.practical-go-lessons.com/chap-37-context 你将在本章中学到什么? 1.什么是上下文? 2.什么是链表? 3.如何使用上下文包? 涵盖的技术概念 Context derivation Linked list Context key-value pair Cancella

    2024年02月08日
    浏览(43)
  • 力扣:62. 不同路径(动态规划,附python二维数组的定义)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2: 输入:m = 3, n

    2024年02月03日
    浏览(42)
  • IP 地址如何进行动态分配?

    由于 IP 地址资源的有限性,大部分用户上网都是使用动态 IP 地址,而不是静态 IP 地址。动态 IP 地址指的是在需要的时候才进行 IP 地址分配的方式,而静态 IP 地址是固定分配一个 IP 地址,每次都用这一个地址。因此,IP 地址动态分配是一种普遍的网络配置方式。 IP 地址动

    2024年01月21日
    浏览(45)
  • 【Java基础教程】(八)面向对象篇 · 第二讲:Java 数组全面解析——动态与静态初始化、二维数组、方法参数传递、排序与转置、对象数组、操作API~

    掌握数组的动态及静态创建方式、使用及特征; 掌握引用类型数据的特征; 掌握数组的排序、转置操作; 数组可以将多个变量进行统一的命名,这样相同类型的元素就可以按照一定的顺序进行组合排列 。在 Java中,数组属于引用类型数据,所以在数组的操作过程中,也一定

    2024年02月13日
    浏览(52)
  • Python如何创建二维数组和初始化

            严格意义上说,Python中并没有数组的概念,Python中表达一组数据有多种形式,例如list,tuple,set等数据结构都可以表达一组数,并且这组数也没有C和C++中数组的的同质限制,这些数可以是任何一种数据类型。         以list为例(list又叫列表),要想实现一个所

    2024年02月20日
    浏览(57)
  • chatgpt赋能python:Python如何创建二维数组

    在Python编程中,经常需要使用到二维数组,它是一个由多个一维数组组成的数组。本篇文章将介绍Python如何创建二维数组,包括几种常用方法。 可以使用list和for循环来创建二维数组。代码如下:

    2024年02月11日
    浏览(49)
  • chatgpt赋能python:Python动态内存分配:如何优化你的代码

    在编写Python代码时,你可能已经注意到内存使用方面的一些问题。Python动态内存分配是一个重要的话题,它涉及到Python程序如何在运行时使用内存。本文将向您介绍Python动态内存分配的基本概念和如何优化您的代码以节省内存。 Python是一种解释型语言,它在运行时使用动态内

    2024年02月07日
    浏览(44)
  • C语言的动态分配空间&&C++的动态分配空间问题

    C:1、malloc 2、calloc C++:new运算符 malloc(): 这个函数用于分配一块指定大小的内存块,并返回一个指向该内存块的指针。语法如下: 释放分配空间 calloc 是 C 语言中用于动态分配内存的另一个函数,与 malloc 类似,但有一些区别。calloc 用于分配一块指定数量和大小的连续内存

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包