当前位置: 首页 > news >正文

奥运会网站制作网站原创文章来源

奥运会网站制作,网站原创文章来源,有个性的个人网站,上海建设人才网证书查询一、前言memset 作为对内存初始化的函数#xff0c;还是有不少坑和误区的#xff0c;今天就来对这个函数作一个总结。二、函数作用最简单的调用就是将一个数组清零#xff0c;代码如下#xff1a;const int maxn 1024; int a[maxn]; memset(a, 0, sizeof(a)); // a[0]a[1… 一、前言memset 作为对内存初始化的函数还是有不少坑和误区的今天就来对这个函数作一个总结。二、函数作用最简单的调用就是将一个数组清零代码如下const int maxn  1024; int a[maxn]; memset(a, 0, sizeof(a));  // a[0]a[1]a[...]0;这里 sizeof(a) maxn * 4 4096表示的是将 数组首地址 a 开始往后的 4096 个字节都设置为 0三、效率对比直接调用 memset 接口清零 和 调用循环进行清零进行一个测试后如下对长度为 10000000 的数组执行100次调用模式memsetfordebug375ms2156msrelease343ms329ms因为 release 版本会做各种优化编译器发现重复执行无效逻辑就会跳过所以不太好造数据测试研究时间效率的时候还是参考 debug 版本当然软件发布的时候肯定用的是 release 版本。memset 无论从时间效率还是代码整洁来看都是由于 for 循环的当然也带来了一些容易引起误解的地方。四、误区总结1、按字节设置memset 实现原理是根据字节来设置的比如对于字节数组char a[100]将所有字节都设置为5就可以调用 memset(a, 5, sizeof(a));但是对于int b[100]也采用这种方法就会导致错误 memset(b, 5, sizeof(b));得到 b 数组中元素的值为 84215045为什么呢我们把这个数组转换成二进制得到( 00000101 00000101 00000101 00000101 ) 2 (00000101 \ 0000 0101 \ 0000 0101 \ 0000 0101)_2 (00000101  00000101  00000101  00000101)2因为 i n t int int 占据了 4 4 4 个字节把每个字节都设置成了5所以最后转成十进制就变成了 84215045同理当类型是 short二字节整数或者 long long八字节整数都会有类似问题总结表格如下memset值charshortintlong long00000-1-1-1-1-155128584215045361700864190383365表格中只有0 和 -1是正常的因为 0 的二进制表示中所有位都为0-1 的二进制表示中所有位都为 1特别的当需要设置的数对应类型的每个字节都是同一个数的时候也可以采用 memset比如int 类型的 252645135十六进制表示为0x0f0f0f0f2、设置的值只有最低字节有效memset(a, 0x05ffffff, sizeof(a)); memset(a, 0xffffff05, sizeof(a)); memset(a, 0xffffff08, sizeof(a)); memset(a, 0x12345678, sizeof(a));设置值的时候只会采用最低的字节作为赋值用通俗的讲就是以上四句话调用等价于memset(a, 0xff, sizeof(a)); memset(a, 0x05, sizeof(a)); memset(a, 0x08, sizeof(a)); memset(a, 0x78, sizeof(a));3、堆内存不可直接 sizeof 取首地址在堆上申请了一个数组空间并且想要给它初始化调用如下const int maxn  1024; int *p  new [maxn]; memset(p, 0, sizeof(p));这里进入了另一个误区因为 p p p 在这里虽然是数组首地址但是它扮演的角色更多的其实是个指针所以在进行 sizeof 运算符操作的时候取得的值并不是 4096而是指针的大小32位机子上指针大小为4,64位机子上指针大小为 8正确做法是const int maxn  1024; int *p  new [maxn]; memset(p, 0, maxn * sizeof(int));4、传参数组不可直接 sizeof 取首地址对传参为数组的数据进行 memset调用如下void fun(int a[maxn]) {memset(a, 0, sizeof(a)); }这里调用同样是错误的因为当数组作为传参的时候这里的 a 已经退化为指针所以同样不能用 sizeof 数组首地址来取大小正确做法是void fun(int a[maxn]) {memset(a, 0, maxn * sizeof(int)); }当然当传参是结构体指针的时候也是如此- EOF -来源https://blog.csdn.net/WhereIsHeroFrom/article/details/111660632
http://www.pierceye.com/news/473817/

相关文章:

  • 网站上常用字体企业服务中心官网
  • 大作设计网站域名访问升级紧急中拿笔记好
  • 银川做网站的有哪些建筑工程网上报建网站诚信手册
  • 本地做网站绑定域名ic商城网站建设南大
  • react 网站开发seo软件资源
  • 中国最大免费wap网站怎样才能建设只是于自己的网站
  • 装修网站平台排行榜wordpress做视频网站吗
  • flash网站建设价格播放器网站怎么做
  • 微网站 源码 免费文本编辑器 网站
  • 电商网站通用左侧弹出导航有南昌网站优化公司
  • 沈阳三好街做网站公司个人网页设计风格分析
  • 网站建设经费计划内容网站建设中存在的问题
  • 天凡建设股份有限公司网站苍山网站建设
  • 如何新建网站dw线下推广的渠道和方法
  • 网站友链wordpress火车头发布
  • 青海网站维护公司自己的网站叫什么
  • 微网站 淘宝客wordpress备案号放置
  • html5 手机网站 模版网站信息员队伍建设
  • 基金会网站开发方案政务公开网站建设重点
  • 影视网站制作网页游戏的软件
  • 企业做网站的费用如何科目青色网站欣赏
  • 做视频网站怎么赚钱的网站开发流程的三个部分
  • 牡丹江市建设行业协会网站广西住房城乡建设厅网站首页
  • 重庆网站关键词排名优化免费网页代理的推荐
  • 定制型网站怎么做重庆软件开发公司有哪些
  • 自适应型网站建设网站建设搭建是什么意思
  • 网站建设能够不同地方网址大全12345
  • 做网批那个网站好校园网站界面建设
  • 免费网站建设php济南网站建设公司官网
  • 徐汇网站推广网络营销的四个特点