文章目录

  • 1 前言
  • 2 动态创建的实现方法
    • 2.1 方法1(适用于二级指针传递)
    • 2.2 方法2(模拟C语言数组的储存方式)

1 前言

参照我之前的一篇文章 二维数组做函数的参数
文章中提到,当我们想向函数传递二维数组的时候,是不可以用二级指针作为形参的。
正确的方法是用数组指针作为形参,详细内容点击上面的链接

在C语言中,想把 int arr[2][3] 这样的二维数组传递到函数 void f(int **arr) 是不可能的

那么有没有办法可以实现呢?
答案是可以,但是需要用到另一种方式,就是动态创建二维数组

2 动态创建的实现方法

我们知道,在C语言中,创建一个数组,1维也好N维也好,都是在内存中线性存储的
例如:int arr[2][5]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JnIouwMh-1581006898069)(https://s2.ax1x.com/2019/04/25/EeXViD.png)]

C语言的声明语句为:

int arr[ROW][COLUMN];

2.1 方法1(适用于二级指针传递)

动态分配的思路是:

  1. 分配一段内存保存ROW个指针
  2. 为ROW个指针每个都分配COLUMN大小的空间
#define ROW (2)
#define COLUMN (3)int **p = (int **)malloc(sizeof(int *) * ROW);
for (int i = 0; i < ROW; i++) {p[i] = (int *)malloc(sizeof(int) * COLUMN);
}

注:需要注意第一行的 malloc 和第三行的 malloc 两者的区别

2.2 方法2(模拟C语言数组的储存方式)

动态分配的思路是:

  1. 创建一段 ROW * COLUMN 长的内存空间
  2. p[ i * COLUMN + j ] 的方式模拟 p[i][j]
#define ROW (2)
#define COLUMN (3)int *p = (int *)malloc(sizeof(int) * ROW * COLUMN);

C语言-动态创建二维数组相关推荐

  1. c语言动态生成二维数组,C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include #include #include #define RANK 10 #define COLUMN ...

  2. C语言动态创建二维数组

    在编程中有时需要使用二维数组作为buffer,下面是我写的一个二维数组的demo. 这里面涉及到几个内存操作的知识点,一个一个的来讲. 1. 创建两个1维数组,用于给二维数组填充值的时候使用. /*2 ...

  3. malloc动态创建二维数组(C语言)

    c语言用malloc动态创建二维数组 #include <stdio.h> #include <stdlib.h> void fun(int m,int n){//行数,列数 ...

  4. C++ 动态创建二维数组

    背景知识: 对二维数组的理解方式至关重要:把二维数组看成是一种特殊的一维数组,它的元素又是一个一维数组. 例如:int a[3][4], 可以理解为定义了3个一维数组,即相当于  a[0], a[1] ...

  5. C++ 动态创建二维数组int** B = new int* [n];

    #include <iostream> using namespace std;int main() {//动态创建一维数组int* A = new int[10]; //int A[10 ...

  6. 动态创建 二维数组和三维数组,最后将数据转为OPENCV图片显示

    二维 //int **dpPT1 = new int*[Index_Qty];//动态申请二维数组//int **dpPT2 = new int*[Index_Qty];//int **dpPP = ...

  7. C++动态创建多维数组

    众所周知,在c++里动态创建一个一维数组可以直接: int* arr = new int[length]; 但是,如果到了二维,这样是行不通的: int** arr = new int[length] ...

  8. python创建一个n*m的二维数组_Python中创建二维数组

    Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...

  9. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

最新文章

  1. 第十六届全国大学生智能汽车竞赛 英飞凌特供芯片支持计划TC364TC377
  2. 如何“取消恢复”恢复的Git提交?
  3. Docker构建YApi镜像, Docker安装YApi, Docker部署YApi
  4. chmod 命令详解
  5. 【PAT甲级 StringBuilder的使用】1005 Spell It Right (20 分) Java版 7/7通过
  6. Android日志[进阶篇]一-使用 Logcat 写入和查看日志
  7. 展示一个基本的正则用例
  8. 模板的日常~。~。。。(持续更新中...)
  9. ubuntu中遇到jupyter出现问题ValueError: signal only works in main thread ERROR:tornado.application:Except
  10. C#文件目录IO常见操作汇总
  11. mysql time 5分钟_MySQL 使用 PV 和 PVC 每天5分钟玩转 Docker 容器技术(154)
  12. 【2022最新Java面试宝典】—— Linux面试题(50道含答案)
  13. libcef.dll丢失怎么办
  14. 阿里P4 - P14技能要求及对应薪资曝光
  15. python简易爬虫:xpath解析方式抓取几页小猪短租官网的住房信息
  16. 如何用电脑下载网页中的视频?
  17. Android中控件设置英文文本内容时区分大小写
  18. Xbrowser远程连接显示灰屏
  19. 学硕停招,985高校这些专业开始只留专硕
  20. 第二章 GD MCU程序下载

热门文章

  1. Hbase源码分析:Hbase UI中Requests Per Second的具体含义
  2. 后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码
  3. 2018.3.29 网页中嵌套网页的两种方法
  4. golang使用reflects调用方法时,方法名需要首字母大写
  5. qt-5.6.0 移植之纯净的linux文件系统的建立
  6. row_number() over()函数基本用法
  7. Java中变量、类初始化顺序
  8. 今天写了个Win32服务设置软件,呵呵,纯绿色软件
  9. 联想员工亲历联想大裁员:公司不是家
  10. [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】