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

番禺微网站建设有什么做兼职的网站

番禺微网站建设,有什么做兼职的网站,网站开发如何无感更新,岳阳做网站公司目录 1 memcpy函数 1.1 函数表达式 1.2 函数模拟 2 memmove函数 2.1 函数的表达式 2.2 函数模拟 3 memset函数 3.1 函数的表达式 3.2 函数的运用 4 memcmp函数 4.1函数的表达式#xff1a; 4.2 函数的运用 5 结论 接上回我们讲了C语言的字符和字符串函数#…目录 1 memcpy函数 1.1 函数表达式 1.2 函数模拟 2 memmove函数  2.1 函数的表达式 2.2 函数模拟  3 memset函数 3.1 函数的表达式 3.2 函数的运用 4 memcmp函数 4.1函数的表达式 4.2 函数的运用 5 结论 接上回我们讲了C语言的字符和字符串函数今天也由姜糖来给大家分享一下C语言的内存函数吧 1 memcpy函数 1.1 函数表达式 void * memcpy ( void * destination, const void * source, size_t num ); 此函数是将source变量中num个字节赋值给destination 注意 需包含头文件string遇到\0不会停下如果source和destination有任何重叠复制的结果都是未定义的。 1.2 函数模拟 原理函数memcpy从cource的位置开始向后复制num个字节的数据到destination指向的内存位置 void* memcpy(void* destination, const void* source, size_t num) {assert(destination source);//断言是否为空指针char* ret destination;//记录改变前的地址以防丢失while (num--){*(char*)destination *(char*)source;//因为是字节的改变所以强转为char*destination (char*)destination 1;source (char*)source 1;}return ret; }int main() {int arr[] { 1,2,3,4,5,6 };int arr1[10] { 0 };memcpy(arr, arr1, 12);int i;for (i 0; i 6; i){printf(%d , arr[i]);}return 0; } 注意 使用void*指针进行间接引用时必须先将其转换为实际类型的指针。这里是改变字节所以使用时改为char*。 重叠的就交给memmove处理。 2 memmove函数  2.1 函数的表达式 void * memmove ( void * destination, const void * source, size_t num ); *包含头文件string 用来处理memcpy处理不了的堆叠问题。 那什么是堆叠问题呢 如果destination为source1num为12则当source中的1赋值到destination上的2时就导致了source中的2也变成了1导致拷贝结果不对这就是堆叠。 那堆叠该怎么解决呢 在memcpy中我们使用的是从前往后拷贝但是这里不行所以我们使用从前往后拷贝在数字被改变之前就完成拷贝的步骤。那是否从后往前拷贝就能解决所有问题呢答案是不行的比如 如图在arr数组上面将蓝色拷贝给黄色就会出错所有我们在编写memmove中应该分类讨论。 那具体该怎么分类呢 同样如图所示设蓝色为source若黄色首地址在蓝色前面则从后往前拷贝反之则从前往后。 2.2 函数模拟  #includestdio.h #includeassert.hvoid* memmove(void* destination, const void* source, size_t num) {assert(destination source);char* ret destination;if (destination source)//从前往后{while (num--){*(char*)destination *(char*)source;//因为是字节的改变所以强转为char*destination (char*)destination 1;source (char*)source 1;}}else//从后往前{*((char*)destination num) *((char*)source num);} }int main() {int arr[] { 1,2,3,4,5,6 };int arr1[10] { 0 };memmove(arr, arr1, 12);int i;for (i 0; i 6; i){printf(%d , arr[i]);}return 0; } 有些人可能会有疑惑好像memcpy能干的memmove能干memcpy不能干的事memcove也能干那为什么存在memcpy呢 memcpy()函数的实现相对于memmove()函数来说更简单、更高效。因为memcpy()不考虑内存重叠的情况所以它在处理非重叠内存区域的数据复制时更快。而memmove()函数需要先判断内存区域是否重叠再决定如何进行数据复制所以相对来说会慢一些。 所以当你确定要进行的数据复制操作不会涉及到内存重叠的情况时可以选择使用memcpy()函数。而当你不能确定内存是否重叠或者确实需要处理内存重叠的情况时可以使用memmove()函数来确保正确的复制结果。 总而言之memcpy()和memmove()都有各自的应用场景你可以根据实际需求选择合适的函数。 姜糖也只能说存在即合理其实如果想偷懒都用memmove就行啦。 3 memset函数 3.1 函数的表达式 void * memset ( void * ptr, int value, size_t num ); 此函数是将内存中的值以字节为单位设置成想要的内容。 包含头文件string。 3.2 函数的运用 #includestdio.h #includestring.hint main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };memset(arr, 0, 40);//将数组全部归0int i;for (i 0; i 10; i){printf(%d , arr[i]);}char str[] Hello world;memset(str, x, 5);//将Hellw全部置为xputs(str);return 0; } 输出结果为 4 memcmp函数 4.1函数的表达式 int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 比较ptr1和ptr2指针指向的位置开始向后num个字节。 包含头文件string。 此函数和strncmp原理大致相同。 4.2 函数的运用 #includestdio.h #includestring.hint mian() {char str1[] hello world;char str[] helloworld;int ret memcmp(str1, str, 6);if (ret){printf(前6个一样);}elseprintf(前6个不一样);return 0; } 输出结果 5 结论 最后两个函数的模拟姜糖改为了函数的运用意在让大家自己开动脑筋结合本文和前文的字符串函数的模拟自己去完成因为他们都有异曲同工之妙。 接下来有什么问题可以私信姜糖哦。也希望大家能一键三连谢谢大家了。最后就让我们一起进步吧
http://www.pierceye.com/news/128007/

相关文章:

  • 建设网站的服务端口教育培训类网站建设
  • 济南网站建设 泉诺如何防范钓鱼网站
  • 沈阳网站推广公司西安网站设计师
  • 网站建设费用计入什么二级科目企业门户网站建设的必要性
  • 宁夏水利厅建设管理处网站大连网站制作431
  • 泰安最好网站建设公司威海房地产网站建设
  • 公司网站建设网站说出网站建设流程
  • wordpress门户网站模板下载大专计算机专业主要学什么
  • 专业的微商城网站建设农产品网站建设计划书
  • 软件网站开发公司广告公司创意取名
  • 工业设计东莞网站建设个人网站备案网站名称
  • 网站只能用ip访问网站吗导航网站 win8风格
  • 用ps可以做网站吗制作一个网站流程
  • 做网站支付系统难度做灯笼手工简单做法
  • 合肥珍岛公司做网站推广怎么样用excel做网站
  • 大连网站建设开源广告制作行业
  • 安阳河南网站建设wordpress 建立导航
  • 电子商务网站建设 考卷wordpress替换头像
  • 石家庄的网站的公司手机wordpress加载图片慢
  • 建企业网站教程wordpress网站被黑
  • 饮料网站建设市场分析什么是seo网站优化
  • 滑动网站国家级示范建设网站
  • 做一门户网站价格个人网站制作模板图片
  • 做网站需要审核资质吗wordpress 防恶意注册
  • 怎么不花钱建网站无人售货机
  • 可以做空股票的网站thinkphp网站开发
  • 给别人做网站怎么赚钱吗专业网络推广软件
  • SOHO英文网站制作晋江网站制作
  • 启东住房和城乡建设局网站邢台网站制作报价多少钱
  • 佛山网站建设seo优化做英文的小说网站有哪些