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

深圳网咯鸟网站建设公司怎么样注册公司最少需要多少钱

深圳网咯鸟网站建设公司怎么样,注册公司最少需要多少钱,中国网信网,网站后台视频目录 引言一、库函数介绍二、库函数详解三、源码实现1.memcpy源码实现2.memmove源码实现 四、测试1.memcpy函数2.memmove函数 五、源码1.memcpy源码2.memmove源码 六、参考文献 引言 关于memcpy和memmove这两个函数#xff0c;不论是算法竞赛还是找工作面试笔试#xff0c;对… 目录 引言一、库函数介绍二、库函数详解三、源码实现1.memcpy源码实现2.memmove源码实现 四、测试1.memcpy函数2.memmove函数 五、源码1.memcpy源码2.memmove源码 六、参考文献 引言 关于memcpy和memmove这两个函数不论是算法竞赛还是找工作面试笔试对这两个函数必然是经常都会用到而且面试的时候很有可能会让你把代码复现出来也许会问你这两个库函数的区别这都是你自学才能知道的所以也是很能体现你实力的一种所以说很重要话不多说了那就开始介绍吧。 一、库函数介绍 #include cstring // CPP版头文件 #include string.h //C版头文件void *memcpy(void *dest, const void *src, size_t count); void *memmove(void *dest, const void *src, size_t count); 功能把从src开始的n个字节拷贝到以dest开始的内存区域中返回dest可进行链式嵌套调用 区别: memcpy要求在使用时这两块区域不能有重叠也就是不能出现自拷贝的情况而memmove则保证在有重叠的情况下结果是正确的。 二、库函数详解 memcpy:强转为char*解引用从前到后依次赋值count次。 但是遇到如下图的情况在src赋值的同时会把自己原本的值给覆盖掉就会出现与使用者本意不相符的情况发生所以memcpy不允许这两块区域重叠。 但如果是如下图这种情况dest会跟本意一样只不过src有些变了但目的还是dest所以这个是没关系的所以这种情况不考虑因为设计者也是这么写的。 memmove遇到有可能发生重叠的情况从后往前赋值就不会出错了可以看图想想。 三、源码实现 这里值得注意的就是*d这块优先级高所以先d结果为d然后*d语句结束后d才。 1.memcpy源码实现 void* memcpy(void* dest, const void* src, size_t count) {if (dest NULL || src NULL || count 0) return dest;char* d (char*)dest;char* s (char*)src;while (count--){*d *s;}return dest; }2.memmove源码实现 void* memmove(void* dest, const void* src, size_t count) {if (dest NULL || src NULL || count 0) return dest;char* d (char*)dest;char* s (char*)src;if (dest src){while (count--){*d *s;}}else{d count;s count;while (count--) // 从后往前赋值{*--d *--s; // 注意这里先减减}}return dest; }四、测试 1.memcpy函数 int main() {const size_t size 20;int a[size] { 0,1,2,3,4,5,6,7,8,9 };int b[size];memcpy(b, a, 10 * sizeof(int)); //注意这里是字节数for (int i 0; i size; i) printf(%d , b[i]);return 0; }可以看出如下的例子说明memcpy不能自拷贝 int main() {const size_t size 20;int a[size] { 0,1,2,3,4,5,6,7,8,9 };int b[size];memcpy(a4, a, 10 * sizeof(int)); //注意这里是字节数for (int i 0; i size; i) printf(%d , a[i]);return 0; }2.memmove函数 如下例子可以看出与memcpy的区别 int main() {const size_t size 20;int a[size] { 0,1,2,3,4,5,6,7,8,9 };int b[size];memmove(a4, a, 10 * sizeof(int)); //自拷贝for (int i 0; i size; i) printf(%d , a[i]);return 0; }正常例子 int main() {const size_t size 20;int a[size] { 0,1,2,3,4,5,6,7,8,9 };int b[size] {0};memmove(b, a, 10 * sizeof(int)); //注意这里是字节数for (int i 0; i size; i) printf(%d , b[i]);return 0; }五、源码 1.memcpy源码 /*** *memcpy.c - contains memcpy routine*Purpose: * memcpy() copies a source memory buffer to a destination buffer. * Overlapping buffers are not treated specially, so propogation may occur. ***********/#include cruntime.h #include string.h#pragma function(memcpy)/*** *memcpy - Copy source buffer to destination buffer * *Purpose: * memcpy() copies a source memory buffer to a destination memory buffer. * This routine does NOT recognize overlapping buffers, and thus can lead * to propogation. * * For cases where propogation must be avoided, memmove() must be used. * *Entry: * void *dst pointer to destination buffer * const void *src pointer to source buffer * size_t count number of bytes to copy * *Exit: * Returns a pointer to the destination buffer * *Exceptions: *******************************************************************************/void * __cdecl memcpy (void * dst,const void * src,size_t count) {void * ret dst;#if defined (_M_IA64){__declspec(dllimport)void RtlCopyMemory( void *, const void *, size_t count );RtlCopyMemory( dst, src, count );}#else /* defined (_M_IA64) *//** copy from lower addresses to higher addresses*/while (count--) {*(char *)dst *(char *)src;dst (char *)dst 1;src (char *)src 1;} #endif /* defined (_M_IA64) */return(ret); }2.memmove源码 /*** *memmove - Copy source buffer to destination buffer * *Purpose: * memmove() copies a source memory buffer to a destination memory buffer. * This routine recognize overlapping buffers to avoid propogation. * For cases where propogation is not a problem, memcpy() can be used. * * Algorithm: *******************************************************************************/void* memmove(void* dest, void* source, size_t count) {void* ret dest;if (dest source || dest (source count)){//Non-Overlapping Buffers//copy from lower addresses to higher addresseswhile (count --)*dest *source;}else{//Overlapping Buffers//copy from higher addresses to lower addressesdest count - 1;source count - 1;while (count--)*dest-- *source--;l}return ret; }六、参考文献 51CTO博客C语言库函数 Memcpy 和 Memmove 的区别你知道多少? CSND博客memmove和memcpy的区别
http://www.dnsts.com.cn/news/108263.html

相关文章:

  • 公司建设网站费用吗深圳做网站龙华新科
  • 深圳做英文网站的公司互动平台网站建设
  • 用哪个网站做相册视频个人网站制作基本步骤
  • 做内容网站现在还做响应式网站吗
  • 网站文件解压网站建设 ader
  • 上海好的网站设计公司一个公司可以做两个网站不
  • 深圳市公司网站建设价格陕西省建设信息网站
  • 上海黄浦区网站建设登录浙江省建设信息港
  • 已备案网站域名青岛电子商务的网站建设
  • 河南移动商城网站建设动画设计专业好的学校
  • 简洁大气公司网站天长市城乡规划建设局网站
  • 冀州做网站的公司百度搜索引擎网址格式
  • 上国外网站用什么机箱好一个人做网站原型
  • 国外私人网站二级域名免费分发
  • 上海网站建设技术托管wordpress 火车头
  • wordpress 站内信 群发常州网站建设价位
  • 网站怎么发外链安卓app市场
  • 建设 信用中国 网站外包的优缺点
  • 如何做自己微网站北京seo顾问服务公司
  • 电脑pc端网站建设是什么意思济南网站制作软件
  • 网站维护外包方案重庆选科网站
  • wordpress怎样搭建外贸网站网址导航系统
  • 网站关键词排名优化价格网络游戏传奇
  • 杭州平台网站建设wordpress漫画主题推荐
  • 子网站建设工作运营推广培训课程
  • 网站建设方案预算费用预算聚美优品网站建设导向
  • 唐山做网站公司建e设计网
  • 汕头市做网站深圳龙岗区地图全图
  • wordpress手机站主题网站界面设计考试
  • 网站模板源码高密做网站的价格