malloc申请二维数组的四种方法
方法一: 二级指针
#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申请二维数组的四种方法相关推荐
- C++中创建二维数组的四种方法
目录 使用一维数组模型二维数组 静态二维数组 动态二维数组 利用vector创建二维数组 #include <iostream> #include <vector>using ...
- 二维数组的四种创建方法
二维数组的四种创建方法 1.声明并赋值 //变量数据类型[] 变量名={{值1,值2...},{值1,值2,值3}};例子如下所示: int[][] a={{1,4,3},{2,6},{7},{1,9 ...
- C语言二维数组的四种遍历方式
二维数组的四种遍历方式: a[i][j] *(a[i]+j) *(*(a+i)+j) *(&a[0][0]+i*n+j) 1.a[i][j] : 这种方法是最基本的方式. 2 ...
- 用new创建一个二维数组,有两种方法,是等价的
//用new创建一个二维数组,有两种方法,是等价的 一: int (*p)[10] = new int[5][10]; 二: int **p ...
- 通过指针访问二维数组的三种方法
下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...
- 用malloc动态申请一个二维数组的三种方法
方法一:利用二级指针申请一个二维数组. #include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态 ...
- 用malloc开辟二维数组的三种办法
第一种办法:用指针数组:首先看一下原理图(以开辟整型二维数组三行四列为例,以下都是): 先看一下用malloc申请一维数组: int *p=(int *)malloc(10*sizeof(int)); ...
- C++ 创建二维数组的几种方法
一.用new申请内存空间 int **dp=new int*[n];//动态申请二维数组nxmfor(int i=0;i<n;++i){dp[i]=new int[m];} 二.用malloc申 ...
- new二维数组的几种方法
(1)可以直接[][]访问.但是内存不连续,不是很推荐使用,除非m\n都不确定 A** ga = new A*[m];//第一维,m为行数(数组[m]内存类型为A的指针) for(int i=0;i& ...
最新文章
- debian编译安装python_编译安装python2.7及相关模块(debian5.0.1)
- android edittext输入邮箱,[Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
- LCD1602液晶显示模块的单片机驱动深入详解之硬件篇
- 古诗文网页版html,古诗文网古诗文经典传承
- 看博客学学Android(五)
- 408计算机考研大纲 doc,2020计算机专业408基础综合考研大纲
- css3修改input[type=radio]样式
- css动画执行保持forwards,css3动画如何在动作结束时保持该状态不变
- 电商大厂面试都有哪些套路?
- 对话李飞飞:云数据库战争已经进入下半场
- sublime的Package Control的安装及使用
- Python类对象的运算符add重载
- Android 关于图片文件夹后缀错误,使应用在源码下编译通过却无法运行的错误...
- shell基础入门1.1shell特性
- 加权平均数的例子_加权平均数定义和实例
- word2007工具栏隐藏了怎样能一直显示?
- Android Studio高级使用技巧
- 主键主键外键和索引_主键和外键之间的区别
- 分享网友第一次开发EOS区块链总结的经验
- Ubuntu-安装汉语拼音输入法