来源:https://blog.csdn.net/longhopefor/article/details/20994919

先说说memset函数:

void *memset(void *s,int c,size_t n)
作用:将已开辟内存空间 s 的首 n 个字节的值设设为 c。

memset()的内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a));

memset() 函数常用于内存空间初始化。如:
char str[100];
memset(str,0,sizeof(str));

先说说一维数组的动态分配和初始化:

一维数组的动态分配,初始化和撤销比较简单,如下所示:

动态分配:int *array=new int [10];//动态分配10个空间

初始化:memset(array,0,sizeof(array));      或者memset(array,0,10*sizeof(int));

撤销:delete [] array;

下面说说二维数组:

二维数组(n行m列)利用new来进行动态分配实际上相当于对n个m元数组进行动态分配,只不过我们不能按照动态分配一维数组的方法来这项操作。MSVC目前还没有这般的人性化,具体应该这样做:

int **array;
array=new int *[10];
for(int i=0;i<10;i++)
         array[i]=new int [5];

上面的操作完成了一个10行5列的二维数组array[10][5]的动态分配,可以看到我们先动态分配了一个10单元的数组的指针的指针的首地址给**array,然后再对其每个首地址进行遍历,同时完成一个5单元的数组的动态分分配,并把首地址给*array[i],从而最终完成了二维数组array[10][5]的动态分配。我们可以依此类推得到三维以至多维的数组的动态分配方法。

二维数组的初始化:如果把一维数组初始化办法照搬过来就会发现对于动态分配的二维数组并不适用。从上面介绍可以看出memset只能作用于一个一维数组 *array,因此最好的办法就是和二维数组的动态分配结合起来,new一个,memset一个。具体写法如下:

int **array;
array=new int *[10];
for(int i=0;i<10;i++)

{
         array[i]=new int [5];

memset(array[i],0,5*sizeof(int));

}

二维数组的撤销:

for (int i = 0; i < 10; i ++) {

delete[] array[i];

array[i] = NULL;//不要忘记,释放空间后p[i]不会自动指向NULL值,还在原处,只是释放内存而已,仅此而已。

}

delete [] array;

array=NULL;

【注意事项】使用memset()函数初始化二维数组时要千万小心:1.二维整型数组利用memset()函数初始化时,只能初始化为0或者-1,否则二维整型数组的值将为随机数。2.二维char数组利用memset()函数初始化时不受限制,可初始化为任意字符。

二维数组传入函数_C++二维动态数组memset()函数初始化相关推荐

  1. VBA 为什么你redim() 动态二维数组总出错?因为 redim 动态数组不太适合和循环搭配

    1总结 1.1 如何避免出错 如果是想生成一个二维数组,最后用静态声明,或则二次声明redim 一个足够大的动态数组 1.2 出错的原因是什么? redim时只有最后1维可变化,redim不太适合和循 ...

  2. asp数组中REDIM的用法(动态数组)

    asp数组中REDIM的用法(动态数组) 动态数组里面的一个语句,只能出现在过程里面,可以多次使用.可以改变数组大小,和维数 格式: REDIM [Preserve] 数组名(下标1[下标2....] ...

  3. 【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 )

    文章目录 一.函数拦截流程 二.定位动态库及函数位置 一.函数拦截流程 函数拦截流程 : 定位动态库及函数位置 : 获取该动态库在内存中的位置 , 以便于 查找函数位置 ; 插桩 : 在函数的入口处插 ...

  4. C语言中malloc函数及free函数用法(定义动态数组及释放)

    一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...

  5. filter函数的用法_动态数组函数系列5| 筛选函数FILTER,单条件多条件动态筛选

    FILTER函数是筛选函数,就是在源数据中按照我们的条件筛选出我们想要的数据.除了常规的数据筛选,还可以进行多条件的"且"或者"或"的筛选. 下面我们来看看这个 ...

  6. c语言回调函数_C语言学习第26篇---函数与指针分析 回调函数

    函数类型的概念 1.C语言函数也是有类型的 2.函数类型由函数返回值,参数类型,参数个数共同决定 int add(int i,int j) 的类型是 int(int , int) 3.C语言中通过ty ...

  7. C语言中动态数组的作用,C语言实现动态数组

    前言 在纯C语言编程中,数组的创建必须是固定的大小,因为C语言本身没有提供动态数组这种数据结构,这是一个让习惯了使用高级语言编程的人转做C开发面临的一个很头疼的问题,本篇文章就将介绍如何使用纯C语言编 ...

  8. python动态数组实现_利用python实现动态数组

    一.数组 说动态数组之前,首先要说数组,数组是一种顺序存储的线性表,所有元素的内存地址都是连续的.数组的最大优点是他的查找时间复杂度能够达到O(1),但是增和删的时间复杂度较高O(n) 二.动态数组 ...

  9. java动态数组的实现_动手编写—动态数组(Java实现)

    目录 数组基础回顾 自定义动态数组 动态数组的设计 抽象父类接口设计 抽象父类设计 动态数组之DynamicArray 补充数组缩容 全局的关系图 声明 数组基础回顾 1.数组是一种常见的数据结构,用 ...

最新文章

  1. easyUI与选择WebUI
  2. hdu 2881(简单dp)
  3. SVM的发展和研究热点
  4. 大型互联网公司分布式ID方案总结
  5. 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机!
  6. java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
  7. List、Map、Set之间的联系与区别:
  8. 如何选择合适的大数据分析平台的类型
  9. linux如何用gcc编译c程序,Ubuntu之如何使用gcc编译C语言程序
  10. java求1到20的阶乘
  11. 2017年CSTQB/ISTQB认证考试时间表
  12. 微信小程序echarts问题整理与解决
  13. 130 个相见恨晚的超实用网站
  14. 研究生的压力应对与心理健康 测试题答案
  15. 算法-使用双指针遍历删除链表节点
  16. 遇上与你一样的她(他)| MixLab人工智能
  17. WeChat微信商户号JSAPI支付 支付授权目录无法添加:添加完成后不刷新再添加一遍
  18. 还在用Navicat破解版吗?资深DBA推荐的八款SQL工具,免费又简单!
  19. 从经济学角度解释:为什么画家总是死后成名?
  20. 命运/天使/恶魔 操纵人类的方法

热门文章

  1. CS230+deeplearning.ai专项课程笔记及作业目录
  2. Php无限层级并显示层级数
  3. 若依集成jwt实现登录授权访问(单体版)
  4. [Ext JS 4] 实战之Chart 坐标控制(单坐标,双坐标)
  5. MySQL 得到数据库的大小
  6. Ext3 -- Form 实例。 用来migrate file 数据到DB用的
  7. mysql geometry 维度_使用MySQL的geometry类型处理经纬度距离问题的方法
  8. 怎么把video文件改成mp4_GiliSoft Video Converter将MP4视频转换成M4V格式教程
  9. linux+tux游戏,Linux吉祥物游戏SuperTux 0.5.0版发布 类《超级马里奥兄弟》
  10. 邮件 查看html源码,微软 Win10解决邮件显示HTML源代码的问题