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

企业采购网站有哪些茌平网站建设价格

企业采购网站有哪些,茌平网站建设价格,公众号怎么赚钱,wordpress 教程 知乎目录 一. C语言内存操作函数 1. memcpy的使用和模拟实现 2. memmove函数 3. memset函数 4. memcmp函数 一. C语言内存操作函数 随着知识的不断积累#xff0c;我们所想要实现的目标程序就会更加复杂#xff0c;今天我们来学习一个新的知识叫做C语言内存操作函数#x…目录 一. C语言内存操作函数 1. memcpy的使用和模拟实现 2. memmove函数 3. memset函数 4. memcmp函数 一. C语言内存操作函数 随着知识的不断积累我们所想要实现的目标程序就会更加复杂今天我们来学习一个新的知识叫做C语言内存操作函数它是C语言标准库中提供的一系列对内存进行操作的函数。比如对于内存的复制内存的设置以及内存的比较这些函数都是针对内存块来处理的为程序员提供了更加安全高效和灵活的方式让程序员能够对内存进行各种常见的操作和处理下面就让我们来详细了解一下吧。 1. memcpy的使用和模拟实现 首先我们来认识memcpy函数它的原型是void* memcpy(void* destination, const void* soure,size_t num)作用就是内容的复制从soure的位置开始向后复制num个字节(注意单位是字节)的数据到destination指向的内存位置。这个函数遇到/0的时候并不会停下来。并且destination和soure有任何的重叠复制的结果都是未定义的。下面给出大家实际的例子 #include stdio.h #include string.h int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] { 0 };memcpy(arr2, arr1, 20);int i 0;for (i 0; i 10; i){printf(%d , arr2[i]);}return 0; } 对于运行结果来说我们也可以看出来如果num小于实际输出的数量那么后面都是用0来补的大家下去可以自己多尝试进行练习。 如何模拟实现memecpy函数呢 #include assert.h void* my_memcpy(void* str1, const void* str2, size_t num) {void* ret str1;assert(str1);assert(str2);/** copy from lower addresses to higher addresses*/while (num--) {*(char*)str1 *(char*)str2;str1 (char*)str1 1;str2 (char*)str2 1;}return(ret); } int main() {int arr1[10] { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] { 0 };my_memcpy(arr2, arr1, 40);int i 0;for (i 0; i 10; i){printf(%d , arr2[i]);}return 0; } 在我们模拟实现的过程中在开始的时候我们要注意两个指针不能是空指针需要assert进行断言我们为什么要进行强制类型转换成char*呢首先我们要明确memcpy函数传入第三个参数size_t num是字节的个数所以当我们强制类型转换的时候会更加方便去计算另外就是我们的指针是void*类型的是不能直接进行加减运算的最终返回一个void*的指针。 2. memmove函数 接下来认识memmove函数它的原型是void* memmove(void* destination,const void* scoure,size_t num)原型与memcpy函数是一模一样的所以说其实memmove函数与memcpy函数的区别就是memmove函数可以处理重叠部分。也就是说如果源空间也目标空间出现重叠的话我们就使用memmove函数来处理。给大家举一个例子说明 #include stdio.h #include string.h int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 2, arr1, 20);int i 0;for (i 0; i 10; i){printf(%d , arr1[i]);}return 0; } 其实对于我们memmove函数的实现其实是更复杂的那么我们究竟要如何实现它呢大家看下面面的四种情况 sour代表的是源空间des代表的是目标函数大家认真看第一个如果我们将sour里面的内容复制到des中我们可以直接按顺序将34567依次放入12345中最终我们的打印结果就是3 4 5 6 7 6 7 8 9 10但是我们来看第三种如果我们将34567按顺序放在56789中我们会发现当我们放完3和4之后原本的5和6就会变成3和4那么原来应该把5和6放在7和8位置上的计划就不能实现所以这样放是不对的但我们换一种方法我们先将7放入9再将6放入8也就是从后面往前面放置对于第四种来说从前往后和从后往前都是一样的。所以我给出大家一张图来更好的说明我们的数组有高低地址之分也就是说当我们的des小于sour的时候我们选择从前往后除此之外我们选择从前往后所以了解了底层的逻辑下面我们就开始设计我们的代码  #include stdio.h #include string.h #include assert.h void* my_memmove(void* dest, const void* sour, size_t num) {assert(dest sour);void* ret dest;if (dest sour)//从前往后{while (num--){*(char*)dest *(char*)sour;dest (char*)dest 1;sour (char*)sour 1;}}else//从后往前{while (num--){*((char*)dest num) *((char*)sour num);}}return ret;};int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr1 2, arr1, 20);int i 0;for (i 0; i 10; i){printf(%d , arr1[i]);}return 0; } 但是可能细心的同学会发现我们就算使用memcpy函数也能够实现重叠部分的程序运算但是我们在C语言中更推荐规范使用如果有重叠部分的就使用memmove函数虽然我们在VS的编译器上用memcpy来处理重叠部分可以成功但是在其他编译器上却不一定所以我们尽量的规范使用。 3. memset函数 memset函数是用来设置内存的将内存中的值以字节为单位设置成想要的内容。它的原型是void* memset(void* ptr,int value,size_t num);ptr就指向要被填充的内存块指针value要设置的内容num就表示要设置成多少个字节。 #include stdio.h #include string.h int main () {char str[] hello world;memset (str,x,6);printf(str);return 0; 4. memcmp函数 memcmp函数是用来比较两个指针大小的它的原型是int memcmp(const void* ptr1,const void* ptr2,size_t num)就是对内存块ptr1和ptr2进行比较比较从ptr1和ptr2指针指向的位置开始向后的num个字节注意也是以字节为单位当ptr1ptr2的时候返回大于0的值当两个相等的时候返回0当ptr1ptr2的时候返回小于0的值。 #include stdio.h #include string.h int main() {char buffer1[] DWgaOtP12df0;char buffer2[] DWGAOTP12DF0;int n;n memcmp(buffer1, buffer2, sizeof(buffer1));if (n 0) printf(%s is greater than %s.\n, buffer1, buffer2);else if (n 0) printf(%s is less than %s.\n, buffer1, buffer2);elseprintf(%s is the same as %s.\n, buffer1, buffer2);return 0;
http://www.hkea.cn/news/14326996/

相关文章:

  • 厦门橄榄网站建设wordpress内网和外网
  • 怎么优化推广自己的网站网站优化总结报告
  • 渐变配色网站仿制别人网站
  • 如何在别人网站挂黑链wordpress 被入侵 删文章
  • 哪里有网站建设服务阐述网络营销策略的内容
  • 中文域名是网站名称吗微博营销的定义
  • 住房建设建设部网站常州知名网站公司
  • 怎样管理网站中国人自己的空间站
  • 辽宁网站建设哪里好找谷歌seo排名优化服务
  • 漂亮网站欣赏成都的教育品牌网站建设
  • 全屏网站宽度wordpress回复批准
  • 电脑上不了建设厅网站百度收录在线提交
  • 现代化公司网站建设南沙电子商务网站建设
  • 网站留言板怎么做如何起手做网站项目
  • 保定设计网站建设做网站的网页用什么软件好
  • 好看的知名企业网站软件工程最好的出路
  • 网站建设经费预算表学网页制作有什么用
  • 五彩科技网站建设山东网站建设哪家好
  • 美容行业网站建设多少价格网站开发费用摊销年限
  • 莱特币做空国外网站做网站的公司不给域名
  • 快速建站公司django 企业网站开发
  • 免费做明信片的网站怎么把广告发到各大平台
  • 如今流行的网站建设网站开发需要的编程软件有哪些
  • 百度不收录什么网站科技有限公司取名字
  • 临淄网站制作首选专家百度网盟推广有哪些网站
  • seo网站推广 杭州美化网站代码
  • 网站建设优化怎么做客户管理系统软件
  • 有什么字体设计的网站网站底部加备案号
  • 建网站收费郑州seo询搜点网络效果佳
  • 邯郸做移动网站价格表iis发布网站页面出问题