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

郑州的做网站公司旅游分销网站建设方案

郑州的做网站公司,旅游分销网站建设方案,做夏促的网站有哪些,洛阳 网站建设 大师字画今天我们来学习一下C语言中内存函数 以下内存函数的使用均需要包含头文件<string.h> 目录 memcpy函数的使用及其模拟实现 memcpy函数的模拟实现 memmove函数的使用和模拟实现 memmove函数的模拟实现 memset函数的使用 memcmp函数的使用 memcpy函数的使用及其模拟实现…

        今天我们来学习一下C语言中内存函数

        以下内存函数的使用均需要包含头文件<string.h>

目录

memcpy函数的使用及其模拟实现

        memcpy函数的模拟实现

memmove函数的使用和模拟实现

        memmove函数的模拟实现

memset函数的使用

memcmp函数的使用


memcpy函数的使用及其模拟实现

        语法结构如下:

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

        memcpy函数从source位置开始向后复制num个字节的数据到destination指向的内存位置

        这个函数在遇到’\0‘的时候不会停下来

        如果source和 destination重叠复制的结果都未知

#include<stdio.h>
#include<string.h>
int main()
{int ar1[] = { 1,2,3,4,5,6,7,8,9,10 };int ar2[10] = {0};memcpy(ar2, ar1,sizeof(ar1));for (int i = 0;i < 10;i++){printf("%d ", ar2[i]);}return 0;
}

        memcpy函数的模拟实现

#include<stdio.h>
#include<string.h>
//函数返回目标空间的起始地址
void my_memcpy(void* dest, const void* src, size_t num)
{//void*指针需要转换,不能直接运算while (num--){*(char*)dest = *(char*)src;src = (char*)src + 1;dest = (char*)dest + 1;}}
int main()
{int ar1[10] = { 1,2,3,4,5,6,7,8,9,10 };int ar2[10] = {0};my_memcpy(ar2, ar1,sizeof(ar1));for (int i = 0;i < 10;i++){printf("%d ", ar2[i]);}return 0;
}

而对于重叠的内存空间,可以交给memmove函数处理

memmove函数的使用和模拟实现

        语法结构:

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

        与memmove函数差别是memmove函数处理的源内存块和目标内存块是可以重叠的 

        如果源内存和目标空间出现重叠,就交给memmove函数处理

int main()
{int ar1[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(ar1+2, ar1,20);for (int i = 0;i < 10;i++){printf("%d ", ar1[i]);}return 0;
}

        结果为:

        memmove函数的模拟实现

        思路:以拷贝5个字节到第三个为起始位置为例:

        

        当将蓝色数据拷贝到红色数据的时候,从后向前;将红色数据拷贝到蓝色数据的时候,从前向后

        因此有如下代码: 

void* my_memmove(void* dest, const void* src, size_t num)
{void* ret = dest;if (dest<src || (char*)dest>(char*)src + num){/*源头在目标前面,或目标在源头后面,则从头开始复制*/while (num--){*(char*)dest = *(char*)src;src = (char*)src + 1;dest = (char*)dest + 1;}}else{/*源头在目标后面,则从尾开始复制*/dest = (char*)dest + num - 1;src = (char*)src + num - 1;while (num--){*(char*)dest = *(char*)src;src = (char*)src - 1;dest = (char*)dest - 1;}}return (ret);
}
int main()
{int ar1[] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(ar1, ar1+2,20);for (int i = 0;i < 10;i++){printf("%d ", ar1[i]);}return 0;
}

memset函数的使用

        语法结构:

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

        memset函数是用来设置内存的,将内存中的值以字节为单位设置成想要的内容

#include<stdio.h>
#include<string.h>
int main()
{char str1[] = "hello world";memset(str1, 'a', 6);printf("%s\n", str1);return 0;
}

       结果为:

         

memcmp函数的使用

        语法结构为:

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

        比较ptr1和ptr2指针指向的位置,向后num个字节(即比较前num个字节的大小)

        返回值如下:

         即:

        <0,ptr1小于ptr2

        =0,ptr1等于ptr2

        >0,ptr1大于ptr2

#include<stdio.h>
#include<string.h>
int main()
{char str1[] = "DWAGYftsuibhug";char str2[] = "DWAGYhulu";int n=memcmp(str1, str2, sizeof(char)*10);if (n == 0){printf("str1 is equal to str2\n");}else if (n < 0){printf("str1 is less than str2\n");}else{printf("str1 is greater than str2\n");}my_memcpy(str1, str2, sizeof(char)*5);return 0;
}

        本篇博客就到这里了。求一个点赞,谢谢各位

http://www.dtcms.com/wzjs/813725.html

相关文章:

  • 浏览器网站设置在哪里阜阳交通建设工程质监局网站
  • 电子商务网站建站公司平台建设怎么写
  • 网站怎么做免费seo搜索引擎wordpress手机登录
  • ps做网站首页怎么东莞市路桥所
  • 阿里云服务器官方网站镇江网站关键词优化预订
  • 广州高端企业网站建设WordPress 列表如何修改成图片
  • 甘肃建设厅官方网站项目负责人ps可以做网站动态图
  • 企业建设网站对客户的好处项目管理师pmp报考条件
  • 合肥网站开发哪家好工 投标做哪个网站好
  • 昆山 网站建设 企炬中国网湖北官网
  • 网站只做程序员平台不得诱导下载
  • 新手学做网站要学什么知识图文教程广告设计软件有哪些
  • 曲阜市住房和城乡建设局网站石家庄软件开发定制
  • 一般做网站所使用的字体互联网平台有哪些
  • 网站建设设计计划表网站开发公司合作协议书
  • 个人博客网站页面wordpress路径
  • 培训网站建设报价单网站获取访客qq号
  • 微信公众号内嵌网站开发重庆公共资源交易中心官网
  • 免费制作微信网页网站凡科登陆网站手机版
  • 怎么制作网站教程步骤视频wordpress调用多张产品图片
  • 网站如何做邮箱订阅辽宁住房和城乡建设厅网站
  • 网站开发开题报告关键问题网站建设经营特色
  • 专业律所网站建设广东全网营销与推广公司
  • 做网站小语种翻译多少钱电脑没有网怎么升级wordpress
  • 广州网站网上销售都有哪些平台
  • 营销型网站建设公司平台wordpress 自定义页面 模版
  • 网站推广排名最新报价泌阳县住房和城乡建设局网站
  • 同一ip 网站 权重公司外贸网站怎么做
  • 南海建设局网站wordpress 用户权限分配
  • 哪个网站上做自媒体最好菏泽网站获客网站建设公司