方法一: 二级指针

#include<stdio.h>
#include<stdlib.h>
int main()
{int i,j;int row = 4,col = 5;//申请一个 4行 5列的二维数组 int **ar = (int**)malloc(sizeof(int*) * row);  //sizeof(int*),不能少*,一个指针的内存大小,每个元素是一个指针。for (i = 0;i < row;i++){ar[i] = (int*)malloc(sizeof(int) * col);}for (i = 0;i < row;i++){for (j = 0;j < col;j++){printf("%p  ",&ar[i][j]);}printf("\n");}for (i = 0;i < row;i++)free(ar[i]);free(ar);return 0;
}

运行结果   可见地址是连续的,且int大小为4个字节

方法二: 数组指针

#include<stdio.h>
#include<stdlib.h>
int main()
{int i,j;int row = 4,col = 5;//申请一个 4行 5列的二维数组int (*ar)[col] = (int(*)[col])malloc(sizeof(int) * row * col);   //(*ar) 括号不能少,[]优先级高,少了就是指针数组了 for (i = 0;i < row;i++){for (j = 0;j < col;j++){printf("%p  ",&ar[i][j]);}printf("\n");}free(ar);return 0;
}

运行结果

方法三: 一维数组模拟二维数组

#include<stdio.h>
#include<stdlib.h>
int main()
{int i,j;int row = 4,col = 5;//申请一个 4行 5列的二维数组int *ar =(int*)malloc(sizeof(int) * row * col);for (i = 0;i < row;i++){for (j = 0;j < col;j++){printf("%p  ",&ar[i * col + j]);}printf("\n");}free(ar);return 0;
}

运行结果

方法四: 用结构体,每个结构体定义 col个元素的一维数组,不过这样用不方便且繁琐。

typedef struct {int a[5];
}item;item *ar = (item*)malloc(sizeof(item) * 4);

总结:几种方法都可以动态的申请二维数组,但就我做题来看,几乎用的全是第一种和第二种方法。如果以指针为参数传递给一个函数一个二维数组要用方法一,方法二会报错。不过方法二简洁,只需要一行代码。malloc内存用完后记得要free释放哦

谢谢。

malloc申请二维数组的四种方法相关推荐

  1. C++中创建二维数组的四种方法

    目录 使用一维数组模型二维数组 静态二维数组 动态二维数组 利用vector创建二维数组 #include <iostream> #include <vector>using ...

  2. 二维数组的四种创建方法

    二维数组的四种创建方法 1.声明并赋值 //变量数据类型[] 变量名={{值1,值2...},{值1,值2,值3}};例子如下所示: int[][] a={{1,4,3},{2,6},{7},{1,9 ...

  3. C语言二维数组的四种遍历方式

    二维数组的四种遍历方式: a[i][j]   *(a[i]+j)   *(*(a+i)+j)    *(&a[0][0]+i*n+j)  1.a[i][j] :  这种方法是最基本的方式. 2 ...

  4. 用new创建一个二维数组,有两种方法,是等价的

    //用new创建一个二维数组,有两种方法,是等价的      一:      int   (*p)[10]   =   new   int[5][10];      二:      int   **p ...

  5. 通过指针访问二维数组的三种方法

    下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...

  6. 用malloc动态申请一个二维数组的三种方法

    方法一:利用二级指针申请一个二维数组. #include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态 ...

  7. 用malloc开辟二维数组的三种办法

    第一种办法:用指针数组:首先看一下原理图(以开辟整型二维数组三行四列为例,以下都是): 先看一下用malloc申请一维数组: int *p=(int *)malloc(10*sizeof(int)); ...

  8. C++ 创建二维数组的几种方法

    一.用new申请内存空间 int **dp=new int*[n];//动态申请二维数组nxmfor(int i=0;i<n;++i){dp[i]=new int[m];} 二.用malloc申 ...

  9. new二维数组的几种方法

    (1)可以直接[][]访问.但是内存不连续,不是很推荐使用,除非m\n都不确定 A** ga = new A*[m];//第一维,m为行数(数组[m]内存类型为A的指针) for(int i=0;i& ...

最新文章

  1. debian编译安装python_编译安装python2.7及相关模块(debian5.0.1)
  2. android edittext输入邮箱,[Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
  3. LCD1602液晶显示模块的单片机驱动深入详解之硬件篇
  4. 古诗文网页版html,古诗文网古诗文经典传承
  5. 看博客学学Android(五)
  6. 408计算机考研大纲 doc,2020计算机专业408基础综合考研大纲
  7. css3修改input[type=radio]样式
  8. css动画执行保持forwards,css3动画如何在动作结束时保持该状态不变
  9. 电商大厂面试都有哪些套路?
  10. 对话李飞飞:云数据库战争已经进入下半场
  11. sublime的Package Control的安装及使用
  12. Python类对象的运算符add重载
  13. Android 关于图片文件夹后缀错误,使应用在源码下编译通过却无法运行的错误...
  14. shell基础入门1.1shell特性
  15. 加权平均数的例子_加权平均数定义和实例
  16. word2007工具栏隐藏了怎样能一直显示?
  17. Android Studio高级使用技巧
  18. 主键主键外键和索引_主键和外键之间的区别
  19. 分享网友第一次开发EOS区块链总结的经验
  20. Ubuntu-安装汉语拼音输入法

热门文章

  1. FPGA 控制 nand flash读写
  2. WeGame聊天室采集
  3. 无人机巡检技术要点解读,无人机巡检方案实现
  4. 最简单的飞机大战小游戏(C语言实现)
  5. 视频捕捉全教程(vc+vfw)
  6. 在m1/m2芯片的mac电脑上运行Stable Diffusion的全步骤
  7. OfficeOnline和OpenOffice对比
  8. JavaScript的对象、属性与方法
  9. Intellij idea和eclipse快捷键—快速复制当前行到上一行或者下一行失效解决
  10. 惠州环境监测实验室建设面积要求