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

佛山做企业网站的公司怎么做网站的ico

佛山做企业网站的公司,怎么做网站的ico,金堂网站建设,俄罗斯最新消息今天c语言系列 文章目录 c语言系列一、memmove函数介绍1.1、函数基本功能1.2、函数参数2.3、函数返回值 二、memmove的使用2.1、拷贝字节不可大于目标空间2.2、同一空间拷贝 三、函数功能的模拟实现3.1、函数参数及其返回值的设定3.2、函数体实现 四、代码实现 一、memmove函数介绍…

c语言系列


文章目录

  • c语言系列
  • 一、memmove函数介绍
    • 1.1、函数基本功能
    • 1.2、函数参数
    • 2.3、函数返回值
  • 二、memmove的使用
    • 2.1、拷贝字节不可大于目标空间
    • 2.2、同一空间拷贝
  • 三、函数功能的模拟实现
    • 3.1、函数参数及其返回值的设定
    • 3.2、函数体实现
  • 四、代码实现


一、memmove函数介绍

下面为该函数基本功能的介绍

在这里插入图片描述

1.1、函数基本功能

memmove的功能是将source指针指向空间的前num个字节,拷贝到detination指针指向的空间,不同于memcpy函数的是,memmove函数允许,两个指针指向的空间有重合。

1.2、函数参数

第一个参数:它是无类型指针(void*),指向要拷贝的目标地址,因此也称为目标指针。
第二个参数:它是const修饰的无类型指针(void*),指向要拷贝的源地址,因此称为源指针。
注:const修饰指针类型时在*之前修饰,代表该指针指向对象的内容不能被修改(地址里的内容不能改);在 * 之后修饰,代表该指针指向的对象不能被修改(指针本身不能被修改)
第三个参数:无符号整型,代表拷贝字节数(拷贝字节不可能为负数)

2.3、函数返回值

无类型指针(void*),函数运行结束后返回拷贝后的目的地内存块的起始地址.

二、memmove的使用

memove的返回值及两个参数的类型均为void*这也就意味着它可以适应绝大多数类型。相信绝大多数人来学习这个函数,都是因为碰到了memcpy解决不了的场景了,而memmove相比之memcpy最大的优点就是在面对目的地内存块和源头内存块重叠空间是,依然可以安全的进行拷贝操作,当然对于不重叠情况它依然是可以解决的。

下面我们来演示一下,拷贝中可能遇到的情景,以便我们接下来的模拟实现,对下面的情况在模拟时,我会再仔细分析的。

2.1、拷贝字节不可大于目标空间

int main()
{int arr1[10] = { 1,2,3,4,5,6,7,8 };int arr2[5] = { 0 };memmove(arr2, arr1, sizeof(arr1[0])*8);//sizeof(arr1[0])*8,代表拷贝八个数组元素的字节return 0;
}

在这里插入图片描述
当拷贝空间大于目标空间时程序崩溃。

2.2、同一空间拷贝

情况一:
拷贝源空间与目的空间不重合,代码及执行结果
在这里插入图片描述

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

画图分析:

在这里插入图片描述
将source指向空间的前两个元素拷贝到detination指向的空间(detination指向空间不足没有影响)。

情况二:
拷贝源空间与目标空间存在重合空间,且source指向空间在前(这里要注意,我对数组首元素地址进行加法操作(arr+1等)指针是向后走的,也就是说后面指针大于前面)
代码及其运行结果:
在这里插入图片描述

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

画图分析:
在这里插入图片描述

情况三:
拷贝源空间与目标空间存在重合空间,且detination指向空间在前

代码及其运行结果:
在这里插入图片描述

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

画图分析:
在这里插入图片描述

三、函数功能的模拟实现

在实现过程中我们对标库中的定义,以及需要具备的功能来模拟完成它。

3.1、函数参数及其返回值的设定

由于memmove函数本身就是内存拷贝函数,并没有参数和返回类型的限定,我们这里同库中一样即可。

3.2、函数体实现

在上面使用部分的讲解中,我们几乎将所有可能出现的情况都给大家展示出来了(异地空间拷贝同上),接下来我们只需实现一个可以满足这些功能的函数体及可,其它细节问题会在代码部分讲解。

情况一分析:

我用蓝色代表源空间待拷贝资源,红色代表目的空间

从前往后拷贝:
在这里插入图片描述
从后往前拷贝:
(进入函数先把指针先后移动)
在这里插入图片描述
这种情况没有涉及源空间,与目标空间的重合问题,所有是很简单的,无论是从前往后拷贝还是从后往前拷贝都是可以完成的。
情况二分析:

博主手残画的丑大家见谅!!!

在这里插入图片描述

从前向后拷贝,数据(4)就会盖.

在这里插入图片描述
当源指针指向空间与目标空间重合且源指针在目标指针前面时(source<detination),我们必须从后往前拷贝才不会发生数据覆盖
情况三分析:
在这里插入图片描述

数据覆盖

在这里插入图片描述
当源指针指向空间与目标空间重合且目标指针在源指针】前面时(detination<source),我们必须从前往后拷贝才不会发生数据覆盖

四、代码实现

对于异地拷贝时,无论是从前往后拷贝还是从后向前拷贝都是可以完成拷贝的。,。

void* my_memmove(void* destination, void* source, size_t num)
{assert(destination&&source);//判断是否为空指针char* dest = (char*)destination;const char* src = (char*)source;if (destination < source)//对标情况三{while (num--){*dest++ = *src++;}}else//对标情况二{while (num--){*(dest + num)= *(src + num);}}return destination;
}

写代码时才发现上面个第一个指针拼错了,但是不影响逻辑,大家见谅!!!
文章时我在复习时写的,如果哪有错误可以私信我,万分感谢!

http://www.yayakq.cn/news/606443/

相关文章:

  • 双语版网站韩城全员核酸检测
  • 最好的做网站公司有哪些厦门人才网个人会员登录
  • 网站广告模板代码怎么做网站网页归档
  • 自助建站广告发布学院网站建设需求分析调研表
  • 怎么做多语言的网站手机网站前端用什么做
  • 北京网站设计精选柚v米科技优质采官方网站安徽外径建设集团
  • 免费网站排名优化软件目前推广平台都有哪些
  • 武进区建设局网站网站如何推广运营
  • 二级目录 网站wordpress 阴影
  • 网站开发示例沈阳网站建设哪家做得好
  • 安阳网站优化网站建设解密
  • 公明做企业网站河南艾特软件 网站建设
  • 苏州网站开发公司电话青岛北方现货交易平台代理
  • 网站备案目的正规十大电商平台
  • 电商企业网站建设方案深圳百度国际大厦
  • 金融网站建设方案ppt亚洲杯中国菲律宾
  • 河北手机版建站系统开发免费做qq互赞网站
  • 寮步镇网站建设电商有多少种方法推广
  • 平面设计公司网站建设费用建设教育网站
  • 企业网站管理的含义及内容erlang做网站优势
  • 柳州柳北建设局网站邯郸网络技术公司
  • 教育响应式网站建设火星人网页设计培训
  • 福建省住房城乡和城乡建设厅网站模板做的网站不好优化
  • 网站建设的流程电子商务百度申请qq号免费注册
  • 怎样注册一个网站平台解压wordpress路径的权限
  • 外语网站建设义乌网站建设方案详细
  • 石家庄做网站制作公司wordpress图片中文
  • 网站开发高级证登陆网站空间的后台
  • 广东省企网站建设交流建设网站
  • 西安外贸网站建设wordpress怎么分页