摘要:注重点介绍函数。发现不能拷贝部分重叠内存情况但是,在编译器中,库函数和的功能一样强大,所以用编译器就会导致两个结果一样黑体然而其他的编译器不一定会让变得这样强大。若是改变成其他大的类型容易造成内存的浪费。
⚠️注:重点介绍 memcpy ,memmove 函数。
话不多说,正文开始?
观察发现,这两个函数的参数和返回类型一样,是否会觉得这两个函数有什么联系呢?
请看下文
void* my_memmove(void* dest,const void* src, size_t count){ assert(dest && src); int i = 0; if(dest > src)//dest指向位置比src指向位置靠后 while (count--)//从后往前拷贝 { *((char*)dest + count) = *((char*)src + count); } else { while (i != count)//从前往后拷贝 { *((char*)dest + i) = *((char*)src + i); i++; } } return (char*)dest;}
void* my_memcpy(void* dest, const void* src, size_t count){ assert(src && dest); while (count--) { *((char*)dest + count) = *((char*)src + count); } return dest;}
运行结果
这里可以看到其实两种函数的结果并不一样。,发现strcpy不能拷贝部分 重叠内存 情况
但是,在VS2019编译器中,库函数 memcpy 和 memmove 的功能一样强大,所以用VS编译器就会导致两个结果一样,然而其他的编译器不一定会让 memcpy 变得这样强大。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121536.html
前言:博主之前有已经写过了C语言常用字符函数详解+模拟实现,感兴趣的同学可以去围观一下哦! 目录 前言: 1.内存函数 memcpy() memmove() memcmp() memset() 2.错误信息报告函数 strerror() perror() 1.内存函数 memcpy() 作用:内存拷贝 函数原型: 注意:count:要拷贝的字节数 函数memcpy从src位置开始向后赋值c...
摘要:一般函数执行完毕,局部活动对象就会被销毁,内存中仅仅保存全局作用域,但是闭包会长期驻扎在内存。我只是想通过这两个例子来说明闭包的用处和好处。闭包会使变量始终保存在内存中,如果使用不当会增大内存消耗。 闭包特性 函数嵌套函数 函数内部可以引用外部的参数和变量 参数和变量不会被垃圾回收机制回收 闭包的作用 具体作用是有权访问函数内部的变量,最常见的就是函数内部创建另一个函数,通过另一个函数...
摘要:类才支持实例属性代码解读上面暂时只是概念性的写法,事实上,的类只是一个原型链的语法糖而已,主要是从写法上更接近于面相对象的类而已,另外一个作用就是区分的构造函数和函数之间的区分。 ES5的原型链和ES6的类实现详解 JavaScript最初设计时受到了面相对象编程的影响,从而引入了new关键字,来实例化对象。而在ES5中new后面跟着的是构造函数(也是函数),而到了ES6则改成了cla...
摘要:类才支持实例属性代码解读上面暂时只是概念性的写法,事实上,的类只是一个原型链的语法糖而已,主要是从写法上更接近于面相对象的类而已,另外一个作用就是区分的构造函数和函数之间的区分。 ES5的原型链和ES6的类实现详解 JavaScript最初设计时受到了面相对象编程的影响,从而引入了new关键字,来实例化对象。而在ES5中new后面跟着的是构造函数(也是函数),而到了ES6则改成了cla...
阅读 3572·2021-10-11 10:59
阅读 1591·2021-09-29 09:35
阅读 2258·2021-09-26 09:46
阅读 3770·2021-09-10 10:50
阅读 952·2019-08-29 12:17
阅读 820·2019-08-26 13:40
阅读 2433·2019-08-26 11:44
阅读 2103·2019-08-26 11:22