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

河北网站制作价格北京市保障房建设投资中心网站首页

河北网站制作价格,北京市保障房建设投资中心网站首页,wordpress开启防盗链,桌面软件开发工具前言#xff1a; C语言中除了字符串函数和字符函数外#xff0c;还有一些函数可以直接对内存进行操作#xff0c;这些函数被称为内存函数#xff0c;这些函数与字符串函数都属于string.h这个头文件中。 一.memcpy#xff08;#xff09;函数 memcpy是C语言中的…前言 C语言中除了字符串函数和字符函数外还有一些函数可以直接对内存进行操作这些函数被称为内存函数这些函数与字符串函数都属于string.h这个头文件中。 一.memcpy函数 memcpy是C语言中的一个内存函数用来将source地址的num个字节复制到destination处。该函数可以处理任何数据所以参数和返回值的类型都是void*。需要注意的是该函数遇到\0之后不会停止直到复制完num个字节。该函数要求目标地址的内存空间必须足够大要能够容纳复制的内容。 虽然memcpy函数是有返回值的但是我们可以选择不接受这是没问题的。 如果源地址处没有num个字节memcpy也不会停止会顺着源地址向后寻找字节直到复制完num个字节 如上图所示源地址只有16个字节而memcpy函数却要复制20个字节的内容这时候复制完16个字节之后会从该处继续向后复制四个字节所以打印出来是随机值。 注意memcpy处理重叠内存的复制结果是未定义的。意思就是如果源地址与目标地址由重叠区域就别用memcpy函数虽然memcpy可以实现但是有memmove函数专门来实现重复区域的复制。 1.memcpy的模拟实现 因为memcpy函数可以针对内存进行操作那就说明它可以对任何数据进行复制所以我们将参数设置成void*类型以便接受各种类型的数据。 既然可以接受各种数据那么怎么实现数据的复制呢 我们可以将所有数据类型都转换成char*类型我们只需要一个字节一个字节的复制就行了因为我们知道一共要复制多少个字节所以借助循环语句将每个字节一一复制就行。 //memcpy函数的模拟实现#include stdio.h #include string.h #include assert.hvoid* my_memcpy(void* destination, const void* source, size_t num) {assert(destination source);void* ret destination;while (num--){*(char*)destination *(char*)source;destination (char*)destination 1;source (char*)source 1;}return ret; }int main() {int nums1[] { 1,2,3,4,5 };int nums2[20] { 0 };my_memcpy(nums2, nums1, sizeof(int) * 5);int i 0;for (i 0; i 20; i){printf(%d , nums2[i]);}return 0; } 二.memmove函数 该函数与memcpy的区别就在于该函数可以处理重叠部分的内存复制。在处理两个毫不相关的内存复制的时候功能与memcpy函数一摸一样。 在该函数中arr是目标地址arr2是源地址而要交换的是三个字节这两个地址有重叠的部分遇到要复制这种情况的就可以使用memmove函数。 1.memmove函数的模拟实现 该函数与memcpy的区别在于可以复制内存重叠部分所以它可以算得上是memcpy的升级既可以完成memcpy的功能也可以完成它不可以完成的。 由图示可知我们可以将重叠部分的复制分为两部分源地址首地址小于目标地址从后-前复制反之由前-后。 //memmove函数的模拟实现#include stdio.h #include assert.hvoid* my_memmove(void* destination, const void* source, size_t num) {assert(destination source);void* ret destination;//前-后if (destination source){while (num--){*(char*)destination *(char*)source;destination (char*)destination 1;source (char*)source 1;}}//后-前else{while (num--){*((char*)destination num) *((char*)source num);}}return ret; }int main() {//char str[] abcdef;int arr[] { 1,2,3,4,5 };//char *ret1 (char*)my_memmove(str1, str, sizeof(char) * 3);char *ret2 (char*)my_memmove(arr1, arr, sizeof(int) * 3);//printf(%s\n, ret1-1);int i 0;for (i 0; i 5; i){printf(%d , arr[i]);}return 0; } 三.memset函数 该函数的功能是将ptr地址中的num个字节修改设置成value值。 对于字符数组来说一个字符占一个字节故将5个字节修改成’1‘就相当于将数组前五个元素设置成1。 四.memcmp函数 memcmp的作用是比较ptr1和ptr2指向地址的num个字节的大小。 如果ptr1ptr2返回大于0的数 ptr1 ptr2返回0 ptr1ptr2返回小于0的数。 返回-1说明arr2第一个字节大于arr1的第一个字节。 图一左上角的是arr1的第一个字节图二左上角是arr2的第一个字节很显然41所以函数返回-1。 完
http://www.hkea.cn/news/14409707/

相关文章:

  • 淘宝网站怎样做设计属于什么行业
  • 站长工具seo综合查询方法领动做的网站怎么样
  • 东营网站关键词北京网站设计制作招聘网
  • 微信小程序商家版南昌网站优化方案
  • 淘宝客推广网站模板用wordpress做微博
  • 家乡ppt模板免费下载网站知春路网站建设公司
  • 西安网站建设eliwe有关网站开发的创意
  • 找做网站技术人员河南建筑公司网站
  • 芜湖网站开发公司电话jsp做的网站如何查看
  • xml做网站企业网站程序下载
  • 旅游电商网站建设方案模板佛山做网站需要多少钱
  • 有域名后怎么做网站wordpress功能插件
  • 大学生水果预定配送网站建设的项目规划书株洲市天元区建设局网站
  • 网站建设内容模板下载酷炫网站设计风格
  • 食品餐饮网站建设iis服务器网站301重定向怎么做
  • 建站备案网站开发平台的公司
  • 网站建站免费百度网站如何优化排名
  • 万能证在线制作生成器温州网站优化
  • 福州建网站,做网页wordpress tint2.2
  • 西安市政道桥建设公司网站我想在百度上发布广告怎么发
  • 建设企业银行网站多少嘉兴企业网站制作
  • 福建中兴建设有限公司网站wordpress调用好麻烦
  • 网软志成免费部队网站源码下载安装wordpress无反应
  • 网站建设 制作教程 pdf西安专业做淘宝网站的公司
  • 初中毕业想学动漫专业合肥seo排名优化公司
  • 做外销网站服务器好吗昆明最新消息今天
  • 许昌市住房和城乡建设局网站怎么制作小程序商城
  • 搜什么关键词能找到网站网线制作步骤及方法
  • 专门做处理货的网站一个人做网站要多久
  • 网站移动端的设计思想新公司起名大全