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

网站地图分析工具网站建设项目概要设计方案

网站地图分析工具,网站建设项目概要设计方案,专业网站建设电,聊城门户网站建设目录 一、引言 二、memcpy 三、memmove 四、memset 五、memcmp 一、引言 C语言作为一门经典的系统编程语言,以其高效性和底层操作能力广泛应用于操作系统、驱动开发及嵌入式系统中。掌握C语言的内存函数,不仅是写出高性能程序的基础,也是…

目录

一、引言

二、memcpy

三、memmove

四、memset

五、memcmp


一、引言

C语言作为一门经典的系统编程语言,以其高效性和底层操作能力广泛应用于操作系统、驱动开发及嵌入式系统中。掌握C语言的内存函数,不仅是写出高性能程序的基础,也是避免潜在内存错误的关键。有哪些常用的内存函数?这些函数在实际开发中又该如何正确使用?

本篇博客将深入介绍C语言中的内存函数,包括memcpy,memmove,  memset , memcmp帮助读者理解它们的功能、使用场景以及注意事项。通过详细的示例和实践经验,期望能够让你在面对动态内存管理时更加得心应手,写出安全、高效的C程序。

二、memcpy

1、基本使用

memcpy 包含在头文件 <string.h> 中 ,它的原型如下:

void* memcpy(void* destination, const void* source, size_t num);

功能:从 source 指向的位置开始向后复制 num 个字节的数据到 destination 指向的空间。

返回值:目标空间的起始地址

注意事项:该函数适用于所有类型的数据,因此遇到 \0 不会停下来;

                  如果source和destination有任何的重叠,复制的结果都是未定义的。

用法举例:

int main()
{int arr1[] = { 0,1,2,3,4,5,6,7,8,9 };int arr2[15];memcpy(arr2, arr1 , 10*sizeof(int));return 0;
}

2、模拟实现 memcpy

void* my_memcpy(void* dest, const void* sour, size_t num)
{assert(dest && sour);void* ret = dest;while (num){*(char*)dest = *(char*)sour;dest = (char*)dest + 1;sour = (char*)sour + 1;num--;}return ret;
}

由于 memcpy 适用于任何类型,所以拷贝的时候要以最小单位(一个字节)进行拷贝,因此会把指针强制类型转换成 char*

三、memmove

1、基本使用

memmove 包含在 <string.h> 中,它的原型如下:

void* memmove(void* destination, const void* source, size_num);

功能:和 memcpy 一样,将 source 指向的空间拷贝到 destination 指向的空间,但与 memcpy 不同的是,memmove 的源空间和目标空间可以重叠

返回值:返回目标空间起始地址

什么是目标空间与源空间的重叠?

如图,这是一个存放着1~10的整型数组,我要将蓝色的地方拷贝到红色的地方,可以看到,蓝色矿与红色框是有重叠的,这种情景就称为目标空间与源空间的重叠

用法举例:

int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 ,10};memmove(&arr[2], arr,sizeof(int)*4);return 0;
}

2、模拟实现 memmove

由于 memmove 可以处理目标空间与源空间重叠的情况,那我们就要仔细考虑一下如何拷贝,最简单的办法就是在重新开辟一个新的空间用来复制源空间,但这样太占用内存,所以我们得考虑一下算法:

第一种情况:

可以看到,我们必须从后往前拷贝,因为如果从前往后拷贝,会导致源空间后面数据的修改

第二种情况:

这种情况必须从前往后拷贝

第三种情况:

这种没有重叠,从前往后拷贝和从后往前拷贝都是可以的

总结一下:当 dest < source 时,从前往后拷贝,当 dest > source 时,从后往前拷贝

所以模拟 memmove 的代码如下:

void* my_memmove(void* dest, const void* sour, size_t num)
{assert(dest && sour);char* 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;
}

四、memset

memset 包含在 <string.h> 中,它的原型如下:

void* memset(void*ptr ,int value, size_t num);

功能:设置内存块的内容,将内存中指定的长度空间设置为指定的内容

ptr:指向要设置的空间

value:要设置的值

num:要设置得的内存长度,单位为字节

返回值:返回目标空间起始地址

使用举例:

int main()
{char arr[] = "matongtongchenglang";memset(arr + 9, 's', 5);return 0;
}

 值得注意的是,memset 以字节为单位,对整型不能使用

五、memcmp

该函数包含在 <string.h> 中,它的原型如下:

int memcmp(const void* ptr1, const void*ptr2, size_t num);

功能:比较两块内存的内容,从 ptr1,ptr2开始向后 num 个字节

返回值:若 ptr1 > ptr2 ,返回大于 0 的数字;

              若 ptr1 = ptr2 ,返回 0 ;

              若 ptr1 < ptr2 ,返回小于 0 的数字;

用法举例:

int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[] = { 1,2,3,4,8 };int r = memcmp(arr1, arr2 ,4*sizeof(int));return 0;
}


文章转载自:

http://jVjuCCX0.sqfrg.cn
http://sSjt5OO5.sqfrg.cn
http://nelgfYyU.sqfrg.cn
http://tpQhA6Do.sqfrg.cn
http://y46aAaIF.sqfrg.cn
http://TyAftGrS.sqfrg.cn
http://T77nFUJv.sqfrg.cn
http://V0obzkXL.sqfrg.cn
http://9u7Cmn9G.sqfrg.cn
http://AY8oWORs.sqfrg.cn
http://UYVHMrrj.sqfrg.cn
http://gGUYpigb.sqfrg.cn
http://F4qzyB80.sqfrg.cn
http://PzH0wgqe.sqfrg.cn
http://iunzW6Fn.sqfrg.cn
http://TtxWA9kn.sqfrg.cn
http://haZpV9ni.sqfrg.cn
http://rUHRiaoH.sqfrg.cn
http://mw8xSnIg.sqfrg.cn
http://q4Mh8Bcb.sqfrg.cn
http://dF06UVgK.sqfrg.cn
http://5cD3KfHG.sqfrg.cn
http://Bbc7hofY.sqfrg.cn
http://Sybkd4Lc.sqfrg.cn
http://lDf9jRvY.sqfrg.cn
http://5qU4IyQA.sqfrg.cn
http://ywjqNfkb.sqfrg.cn
http://0FxliAw2.sqfrg.cn
http://8YwlSh8y.sqfrg.cn
http://N8sk0rqW.sqfrg.cn
http://www.dtcms.com/wzjs/760272.html

相关文章:

  • 哪里有免费的网站源码专业做网站安全的sine安
  • asp.net网站后台源码网站平台建设费计入什么科目
  • 怎么建网站快捷方式宁波企业网站建设
  • 自己建设网站需要花多少钱编辑公众号
  • 建设网站公司wordpress php 採集
  • 深圳网站平面设计网站首页布局自适应
  • 江苏网站建设制作波哥昆明网站建设
  • 手表官方网站中信建设有限责任公司在柬埔寨的建筑项目
  • ps最好用的素材网站广州做网站优化哪家专业
  • 河北seo网站开发网站开发的项目经验
  • 周到的网站建设可免费下载的简历模板
  • 泾川县建设局网站免费标志在线设计
  • 会议专属网站平台建设报价单如何添加百度指数
  • 邯郸市城乡建设管理局网站asp官方网站
  • 设计网站公司做网站游燕
  • 欧美化妆品网站模板下载大连建设工程信息网查询
  • 网站建设与代运营介绍中国新闻社四川分社
  • 装潢设计培训网站同时做竞价和优化可以吗
  • 网站建设通报室内装修图
  • 网站建设需要交印花税吗wordpress 360浏览器
  • 顺德网站建海南网络广播电视台开学第一课
  • 电脑上做网站网站开发拓扑图
  • 做展示类网站设计师一般多少岁被淘汰
  • 辽阳专业网站建设品牌百度首页百度
  • 网站开发需要客户做什么wordpress的文档主题
  • 关于申请开通网站建设的请示网站开发PRD
  • 温岭做鞋子的网站wordpress网站 华为
  • 找做cad彩拼的网站网站开发工程师是什么
  • 江门自助建站模板东莞市网站建设制作设计平台
  • 大学生简历制作网站学校官网主页网页设计