memset(void *s,int ch,size_t n);

作用:将s中当前位置后面的n个字节用 ch 替换并返回 s

注意这里是“字节”而非单位长度,memset不会考虑各个类型的单位长度,只是处理字节。所以使用的时候应该用如下的格式:

memset(a,b,n*sizeof(int));//这里以Int为例。

-----------------------------------

同样是这个问题,我在一次想要给一个二维数组赋初值INT_MAX,写了这样的语句:

memset(mi,0x3f,sizeof(mi));

但是得到的结果却一直是-1,这是因为忽略了memset只是给字节赋值而非给单位赋值!INT_MAX是int中的最大值,但Int是占用4个字节的!用Int的最大值给字节赋值显然不合适。

常用的几个正确的memset初始化方案有:

memset(mp,0,sizeof mp):  使mp数组里的所有值变为0x00000000 ,而0x00000000 = 0,所以mp数组里的所有值就变为了0。
memset(mp,0x3f3f3f3f,sizeof mp):0x3f3f3f3f = 1061109567 为10^9。 而且使用这个数字直接用memset函数就行了,不用循环初始化数组,不然真的很烦。(不是Int的最大值,但也已经是一个比较大的数了,大多数情况下可以了)
memset(mp,-1,sizeof mp):会使mp中每个元素的值为-1的原因如下:
int类型的整数-1在32位的计算机中表示为 11111111    11111111   11111111   11111111
memset将void *memset(void *s, int ch, size_t n)中的ch强制转换为unsigned char,
也就是变成11111111
最终执行完memset函数后,temp对应的内存每一字节都被赋值为11111111
也就是说temp的任意一个元素都为11111111    11111111   11111111   11111111
恰好为-1。

---------------------
作者:Mr_Treeeee
来源:CSDN
原文:https://blog.csdn.net/Mr_Treeeee/article/details/70540307
版权声明:本文为博主原创文章,转载请附上博文链接!

同样的错误方案有:

memset(mp,1,sizeof mp):  变量被初始化成了0x01010101 = 16843009 , 而非1。 所以并不能用。

最新文章

  1. git操作的常用命令
  2. jquery 通过ajax FormData 对象上传附件
  3. 求第N个质数算法
  4. java enum类
  5. 搭建spring+mybatis+struts2环境的配置文件
  6. Memcached 搭建过程
  7. 面试前的准备---C#知识点回顾----05
  8. hdu1520 (树形dp)
  9. PRJ: Split a nodes-map into some triangles
  10. 再谈KMP
  11. Go笔记-流程控制
  12. 设计模式——抽象工厂模式(C++实现)
  13. centos 系统时间的同步
  14. 修复android 5.0 Xutils的框架问题retry error, curr request is null
  15. 从零开始学spring cloud(一) -------- spring cloud 简介
  16. react在router中传递数据的2种方法
  17. 【iCore1S 双核心板_FPGA】例程十一:Modelsim仿真实验
  18. :模板方法模式:Beverage
  19. 使用zabbix-java-gateway可以通过该网关来监听多个JVM
  20. Linux上查找

热门文章

  1. Python全栈开发第5天作业
  2. 使用 Itext 生成PDF字节数组(文件流不落地)
  3. TLS Thread Local Storage
  4. Javascript和JQuery获取浏览器窗口各种尺寸
  5. Workflow-产品:泛微工作流引擎
  6. 开源缓存框架之ASimpleCache
  7. HAproxy负载均衡-ACL篇(转) blog.csdn.net/tantexian
  8. JavaScript 格式化数字成金额格式
  9. APP营销软件项目常见(合规)风险评估
  10. Servlet(4):Session