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

赣州培训学做网站国内新闻最新消息十条

赣州培训学做网站,国内新闻最新消息十条,网站每天更新多少文章,济宁市做网站的公司前言 前面两篇文章介绍了字符串函数,不过它们都只能用来处理字符串,C语言中也内置了一些内存函数来对不同类型的数据进行处理,本文将介绍:memcpy()使用以及模拟实现,memmove()使用以及模拟实现,memset()使用…

前言

        前面两篇文章介绍了字符串函数,不过它们都只能用来处理字符串,C语言中也内置了一些内存函数来对不同类型的数据进行处理,本文将介绍:memcpy()使用以及模拟实现,memmove()使用以及模拟实现,memset()使用,memcmp()使用。


目录

前言

memcpy()使用以及模拟实现

memmove()使用以及模拟实现

memset()使用

 memcmp()使用


memcpy()使用以及模拟实现

        函数参数及其返回类型:

void* memcpy(void* destination, const void* source ,size_t num);
//返回值为目标空间的起始地址

作用:

从源地址起复制num个字节到目标地址

注意点:

①memcpy函数不负责重叠内存的情况(如果源地址和目的地址有任何重叠,结果都是未定义的)

②头文件<string.h>

使用举例:

 模拟实现:

//memcpy模拟实现
#include<assert.h>
void* my_memcpy(void* s1, const void* s2, size_t num) {assert(s1 && s2);//防止传入空指针void* p1 = s1;//使用一个值保存首地址,等下好返回首地址while (num--) {*(char*)s1 = *(char*)s2;(char*)s1 = (char*)s1 + 1;//不能使用(char*)s1++,因为(char*)(强制类型转换)和++(自增)都是表达式//因为第一个表达式执行后是临时的,转换结果没被保存下来(char*)s2 = (char*)s2 + 1;}return p1;
}
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr1[10] = { 0 };int i = 0;my_memcpy(arr1, arr, sizeof(arr));for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {printf("%d ", arr1[i]);}return 0;
}

运行结果:


memmove()使用以及模拟实现

         函数参数及其返回类型:

void* memmove(void* destination, const void* source ,size_t num);
//返回值为目标空间的起始地址

作用:

从源地址起复制num个字节到目标地址(memmove函数能完全代替memcpy函数),尽量使用memmove函数

注意点:

①memcpy函数和memmove函数最大区别就是,memmove函数能实现源地址和目的地址有重叠的拷贝,所以memmove函数能完全代替memcpy函数

②头文件<string.h>

使用举例:

 模拟实现:

前面我们已经实现了memcpy函数的模拟实现,现在我们面临唯一问题就是如何解决,源地址和目的地址有重叠的拷贝,经过分析我们发现重叠其实有两种情况:

①源头地址大于目标地址时

        源地址从后往前拷贝

②目的地址大于源头地址时

        源地址从前往后拷贝

 代码:

//memmove模拟实现
#include<string.h>
#include<assert.h>
void* my_memmove(void* s1, const void* s2, size_t num) {assert(s1 && s2);void* ret = s1;if (s2 >= s1) {//①源头地址大于目标地址时while (num--) {*((char*)s1+num) = *((char*)s2+num);}}else {//②目的地址大于源头地址时while (num--) {*(char*)s1 = *(char*)s2;(char*)s1 = (char*)s1 + 1;(char*)s2 = (char*)s2 + 1;}}return ret;
}
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr + 5, arr, sizeof(arr[0]) * 5);for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {printf("%d ", arr[i]);}return 0;
}

运行结果:


memset()使用

         函数参数及其返回类型:

void* memset(void* ptr, int value ,size_t num);
//返回值为被填充空间的起始地址

作用:

用来设置内存,将内存空间以字节为单位设置成想要内容

注意点:

①是以字节为单位设置的,当为int类型设置时可能出错

②头文件<string.h>

使用举例:


 memcmp()使用

         函数参数及其返回类型:

int memcmp(const void* ptr1, const void* ptr2,size_t num);
//返回值是大于:大于0的数,等于:0,小于:小于0的数

作用:

比较两块空间前num个字节

注意点:

①是以字节为单位比较

②头文件<string.h>

使用举例:

http://www.15wanjia.com/news/24933.html

相关文章:

  • 餐饮公司做网站好处查域名备案
  • 网站做facebook推广德州seo优化
  • 学校网站建设实训做微商怎么找客源加人
  • 网站图片用什么做的baidu优化
  • 做网站的业务分析建站流程新手搭建网站第一步
  • 几何背景生成器网站网站服务器搭建
  • 英文企业网站源码黄页88网
  • 自己下载的字体怎么导入wordpress南宁网站seo外包
  • 河北网站建设就业考试舆情信息怎么写
  • 做网站去哪里做网站优化推广培训
  • wordpress主动推送代码国内seo排名
  • 淮安市建设监理协会网站链接提取视频的网站
  • 网站如何做mipseo网站推广首页排名
  • 网站域名如何使用什么是域名
  • 公司网站服务器租赁电子商务seo是什么意思
  • 网站修改建议百度seo推广计划类型包括
  • 小孩做愛网站5188关键词挖掘
  • 找做金融的网站有哪些自动交换友情链接
  • 做服装招聘的网站网络营销专家
  • 宜兴公司做网站软文推广渠道
  • 网站建设用户画像例子百度app免费下载安装最新版
  • 龙泉市建设局网站山东泰安网络推广
  • 制作图片模板网站seo是什么
  • 做网站 图片素材怎么找如何使用免费b站推广网站
  • 成都网站建设公司排名营销qq下载
  • 网站建设 财务归类桂林市天气预报
  • 怎么做前端网站百度竞价返点开户
  • 建设厅网站的无法打印国内推广平台
  • 中小型教育网站的开发与建设app开发制作
  • 网站根目录相对路径杭州百度推广代理商