malloc申请二维数组的四种方法

2023-11-18

方法一: 二级指针

#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释放哦

谢谢。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

malloc申请二维数组的四种方法 的相关文章

  • 什么吃掉了我的硬盘?

    什么吃掉了我的硬盘 http www am82 com houzan archives 4550 posted on 2010 08 15 20 29 lexus 阅读 评论 编辑 收藏 转载于 https www cnblogs com
  • L2TP和PPTP的区别

    用最短的时间搞清楚L2TP和PPTP的区别 一 相关知识铺垫 1 虚拟隧道协议 一种通过公共网络的基础设施 在专用网络或专用设备之间实现加密数据通信的技术 通信的内容是可以是任何通信协议的数据包 隧道协议将这些协议的数据包重新封装在新的包中
  • 离散系统的变换域分析【数字信号处理四】

    离散系统的变换域分析 一 求系统H z 的零 极点 幅频响应和相位响应 二 用Matlab验证DFT运算的对称性质 三 产生数字线性调频信号 分析时域波形和频谱特性 四 设计简单的OFDM系统 并验证循环前缀的作用 一 求系统H z 的零
  • (黑客)自学笔记

    一 自学网络安全学习的误区和陷阱 1 不要试图先成为一名程序员 以编程为基础的学习 再开始学习 行为 从编程开始掌握 前端后端 通信协议 什么都学 缺点 花费时间太长 实际向安全过渡后可用到的关键知识并不多 很多安全函数知识甚至名词都不了解
  • Xception论文解读

  • make/makefile的使用

    make makefile 文章目录 make makefile 初步认识makefile的工作流程 依赖关系和依赖方法 make的使用 总结 make是一个命令 是一个解释makefile中指令的命令工具 makefile是一个文件 当前
  • oracle数据库中输入date类型的数据

    给oracle数据库已有记录中更新date类型的数据 插入date类型的格式 to date 2016 01 03 12 23 19 yyyy mm dd hh24 mi ss 2016 01 03 12 23 19 表示想要插入的时间 y
  • 华为鸿蒙os今日新闻,华为正式发布鸿蒙OS,却再次被质疑

    6月2日 市场瞩目的鸿蒙产品发布会成功举办 此次华为还连发三款搭载鸿蒙系统的硬件 华为 MatePad Pro 平板 华为 Watch 3 智能手表和华为 FreeBuds 4 TWS 耳机 但事情总有两面性 喜欢你的不论你做什么都会被看好
  • 小白入坑-利用express构建一个简单的Node项目

    做了部分前端的东西 当然不能局限眼前的成果 梦想能成为全栈的大佬 然后左手一个小姐姐 右手一个富萝莉 走远了 奈于java对前端来说比较难 耗费的学习时间也比较长 所以先从node下手过一下瘾儿 首先 win r打开windows的运行框
  • 什么是堡垒机

    什么是堡垒机 1 堡垒机是用来解决 运维混乱 的 堡垒机是用来干什么的 简而言之一句话 堡垒机是用于解决 运维混乱 的 何谓运维混乱 当公司的运维人员越来越多 当需要运维的设备越来越多 当参与运维的岗位越来越多样性 如果没有一套好的机制 就
  • Git入门超详细文档

    Git Git概述 Git是一个免费的 开源的分布式版本控制系统 可以款速高效的处理从小型到大型的各种项目 Git易于学习 占地面积小 性能极佳 它具有廉价的本地库 方便的暂存区域和多个工作流分支等特性 其性能优于Subversion CV
  • 试除法判定质数模板题

    试除法判定一个数是否为质数类似于这道题 代码 include
  • mac文件夹权限的@

    demo是网站根目录 终端下执行 cd到demo ls l 显示 drwxr xr x 9 andy admin 306 10 12 17 43 demo 这里的 貌似是mac特有的 第一次使用file put contents往根目录添加
  • QMutex使用时遇到的错误

    class A public explicit A QObject parent 0 A public QMutex m mutex class B public explicit B QObject parent 0 B private
  • C语言笔记 第三章 键盘输入与输出

    文章目录 1 printf 1 1 整型 1 2 字符型 1 3 浮点型 1 4 其他 1 4 1 标志 1 4 2 输出最小宽度 1 4 3 精度 1 4 4 类型长度 1 5 转义字符 2 scanf 2 1scanf 函数的一般形式
  • 网络安全----应急响应入侵排查

    系列文章目录 Web网络安全 红蓝攻防之信息收集 Web网络安全 Log4j高危漏洞原理及修复 Shell分类详解 图形界面 命令行式 Linux安全 应急溯源常用命令 记一次实战成功溯源反制getshell 文章目录 系列文章目录 一 应
  • ADS1256驱动程序

    1 初始化 接口 SPI2 STM32 ADS1256 NSS PB12 CS SCK PB13 SCLK MISO PB14 DOUT MOSI PB15 DIN PB10 DRDY PB11 RESET
  • 感知机介绍及实现

    感知机 perceptron 由Rosenblatt于1957年提出 是神经网络与支持向量机的基础 感知机是最早被设计并被实现的人工神经网络 感知机是一种非常特殊的神经网络 它在人工神经网络的发展史上有着非常重要的地位 尽管它的能力非常有限
  • 错误ValueError: Buffer dtype mismatch, expected ‘float32_t‘ but got ‘double

    PCL库调用错误 cloud0 from array all pointcloud world File pcl pxi PointCloud PointXYZ 180 pxi line 160 in pcl pcl PointCloud

随机推荐

  • 一款强大的API接口文档管理工具(Smart-Doc + Torna)

    本文由龙飞同学供稿 在团队协作开发项目的时候 接口文档承担着向其他开发人员说明接口相关信息的重要任务 因此 一份清晰而又相近的接口文档至关重要 但是 写接口文档的痛苦想必各位开发人员都体验过 明明写接口的时候那么丝滑 写接口文档的时候像要老
  • linux 系统下执行R文件

    随着数据量的激增 在linux系统环境下执行数据分析模型显得很重要 本文来总结下在linux系统下执行R文件的步骤 step01 创建R脚本 例如 Rtest R step02 创建shell脚本 例如 runRtest sh 内容为 bi
  • 自由软件基金会公布了AGPL v3许可证

    自由软件基金会发布了一种新的开放源代码软件许可 新许可面向其代码被用作软件服务化 SaaS 应用的开发人员 新许可将确保对开放源代码SaaS应用代码的修改会反馈给自由软件社区 新许可名称为GNU Affero General Public
  • CCF-CSP-202109-4-收集卡牌

    原题链接 满分代码 include
  • eplan怎样创建和修改图框_EPLAN标题页及图框的设计

    标题页理解为特殊的表格 选择 工具 主数据 表格 打开 弹出 打开表格 对话框 文件类型 标题页 封页 f26 选择需要打开的表格 点击打开按钮 表格中的元素 1 文本 表示普通的 固定的文字 2 特殊文本 表达项目属性 页或表格属性的值
  • oracle 分表

    项目中操作日志因为数据量过大所以做分表操作 MYBATIES 创建表
  • .Net项目github接入sonarcloud

    代码质量方面的检测工具 在这之前从来没用过 就算前阵子听说了sonarcloud 也仅当知道记录了下 结果昨天被某些事情刺激了下 于是去查了下资料 然后就顺便在github上做了下测试 这里做个记录 sonarcloud的官网地址是http
  • JUC并发编程狂神说笔记(超详细)

    JUC 环境准备 线程和进程 wait与sleep的区别 lock锁 重点 传统的Synchronized锁 Lock锁 接口 Sychronized和lock的区别 锁是什么 如何判断锁的是谁 生产者和消费者的问题 Sychronized
  • docker-swarm 节点增加、删除、权限提升、降低、服务部署、配置可视化界面、stack等一系列操作

    一 部署环境准备 系统版本 centos 7 8 docker swarm 至少需要三个节点 所以需要准备三台机器 本文使用虚拟机 虚拟三台 centos机器 配置如下 节点信息 修改主机名 hostnamectl set hostname
  • 1、嵌入式linux

    嵌入式linux linux 2 应用程序设计 1 创建文件 2 文件描述 3 系统调用 打开 linux 你好 2 应用程序设计 系统调用方式访问文件 1 创建文件 使用的是 creat的系统调用方式 创建一个file creat c的文
  • 【交通运输与新基建(三)】交通基础设施数字化智能化发展

    目录 新技术推动交通系统数字化智能化发展 数字交通 新基建下数字交通助力提升道路安全主动干预及应急反应能力 挑战 展望 新技术推动交通系统数字化智能化发展 互联网 的发展 推进了人获得精准 便利 预约 共享 个性化 一体化的服务 自动驾驶技
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分 实现效果 第二部分 动态VGA显示的原理 1 将动态显示的区域提前进行赋值 2 图像块的移动是每张图片叠加后的效果 3 如何实现图像块位置的改变 第三部分 系统结构和驱动波形 1 系统的Top down结构 2 图像块移动的
  • BigInteger和BigDecimal有什么区别?

    BigInteger和BigDecimal都是Java中用来处理大数的类 主要区别在于它们的用途不同 BigInteger适用于处理大整数 即整数位数大于long类型的最大值9223372036854775807的情况 BigInteger
  • 如何将个人 NAS 里的 Stable Diffusion 模型库挂载到 PAI-EAS

    通过在线迁移服务 您已经将SD公共模型库的模型文件转存到了自己的NAS文件目录中 该存储空间中的模型可以被用于SDWebUI 另外也可以将未来训练和推理的结果保存到该NAS目录中 您可以通过如下文件挂载方式来实现 1 前往文件存储NAS控制
  • java 常见判断题

    1 根据下面的代码 String s null 会抛出NullPointerException异常的有 if s null s length gt 0 if s null s length gt 0 if s null s length 0
  • 微信接口CSDN博客

    http blog csdn net xiong it article details 45174207
  • 工作中遇到的99%SQL优化,这里都能给你解决方案

    前几篇文章介绍了mysql的底层数据结构和mysql优化的神器explain 后台有些朋友说小强只介绍概念 平时使用还是一脸懵 强烈要求小强来一篇实战sql优化 经过周末两天的整理和总结 sql优化实战新鲜出炉 大家平时学习和工作中 遇到的
  • Could not load dynamic library ‘libcudart.so.11.0‘; dlerror: libcudart.so.11.0: cannot open shared o

    Could not load dynamic library libcudart so 11 0 dlerror libcudart so 11 0 cannot open shared object file No such file o
  • spring cloud框架介绍

    直接引用经典文章来源 https blog csdn net w05980598 article details 79007194什么是微服务 微服务的概念源于2014年3月Martin Fowler所写的一篇文章 Microservice
  • malloc申请二维数组的四种方法

    方法一 二级指针 include