当前位置:首页 » 《休闲阅读》 » 正文

打开C语言常用内存函数的大门(一) —— memcpy()函数 (内含讲解用法和模拟实现)

11 人参与  2024年10月17日 10:01  分类 : 《休闲阅读》  评论

点击全文阅读


文章目录

1. 前言2. memcpy函数2.1 memcpy函数的原型2.2 memcpy函数的形参和返回值详解 3. memcpy函数的演示4. memcpy函数的模拟实现5. 总结

1. 前言

在之前写的文章中,我介绍了几个比较常用的字符串函数strlen、strcmp、strcpy。它们作用的对象只能是形如字符串类型的数据。
那这难免会引起我们心中一泡浓厚的求知欲——C语言有没有给我们提供一些类似于字符串函数的功能,但是这些函数的作用对象是所有的数据类型呢?如果你是这么想的,那么恭喜你???来对地方了。

C语言的确提供了这种函数,在C语言中被称为内存函数。

下面我将讲解,常用的内存函数之一的memcpy函数。(还有几个常用的内存函数,会在之后的文章中一一介绍,敬请期待?)

2. memcpy函数

memcpy()函数,就是内存拷贝函数。
作用:将指定内存空间的内容拷贝到你想要存放的内存空间处。但前提是你想要存放的内存空间大小得容纳得下待拷贝的内容。

2.1 memcpy函数的原型

memcpy函数的原型

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

简单观察一下,你会发现,这个函数的返回值是个void*指针。形参有两个void*指针,其中还有一个带有const限定符修饰,另外还有一个size_t类型的变量。

那么下面,我将介绍memcpy函数各参数的和返回值分别代表的是什么含义。(希望读者们能够学会使用memcpy函数)

2.2 memcpy函数的形参和返回值详解

在开始之前,我先放上一张看来自官网的参数和返回值解释(英语好的读者们直接看就可以了)
形参和返回值

返回值和形参作用
返回值类型:void*返回目的地空间的地址。(说大白话,就是返回你想要拷贝内容到那个空间的地址,不过我们很少会用到它的返回值)
destination一个空指针类型的变量,指向待拷贝空间的地址处
sourceconst void* 指针类型的变量,指向拷贝内容的空间地址处
numsize_t类型的变量 , 表明我要拷贝多少个字节数的内容

相信读者们看完上面的表格后,已经知道memcpy函数该如何使用了。

如果还没有什么感觉的话,没有关系,下面我就带着各位去写代码感受一下memcpy函数的魅力所在

3. memcpy函数的演示

在演示之前,先说明一下,memcpy()作为C语言中的库函数,在使用之前我们得先引用一个头文件<string.h>
memcpy函数的演示
可以看到,arr1中的数据确实拷贝到了arr2数组上去了。

可这时有的读者就会问了,不就是数组内容的拷贝麻,我直接用循环就能解决,为什么还要这么麻烦?
先不要着急,还记得在文章的开头我讲过,memcpy()函数可以拷贝任意类型的数据!!!

下面我就展示一个拷贝结构体内容的代码:
memcpy函数的演示
可以看到,结构体的内容也是能够进行的拷贝的。

那么讲到这里,memcpy函数的演示使用就结束了。读者们如果感兴趣的话,可以试多几个不同的数据类型,看看能否拷贝成功。

4. memcpy函数的模拟实现

学会了如何使用memcpy函数后,下面我们来个进阶的知识点——模拟memcpy函数的实现。
这么做是为了让读者们对memcpy()函数的理解更上一层楼,这也正是我们学习的初衷——用知识武装自己,有技术征服他人。

为了方便讲解,我先给出模拟代码:
memcpy函数的模拟实现
如果有看过我之前文章的读者,相信对这种方式已经不陌生了。

这里就主要讲一下,为什么dest和src要强制转换为(char*)类型的原因:

第一点:我们无法对void*类型的指针进行解引用操作和指针偏移的操作,这就是我们需要强制转换的根本原因;第二点:我们之所以选择强转char*指针类型,是因为memcpy函数面向的数据类型是未知的。但是我们不能被这种未知的情况所打到,于是乎我们仔细的想了一下,既然数据在内存中是以字节为单位存储的,换句话说字节就是内存中最小的度量单位了,那么我们就明白了,用char*指针能访问一个字节内容的大小。这样做的话,即使我们不知道具体的数据类型,也可以通过传进来的字节个数,确定我要对这个char*指针偏移的次数,从而实现精准的拷贝。

模拟实现
可以看到,结果是没有什么问题滴。

5. 总结

在本文中,我介绍了memcpy函数的返回值和各个形参的含义、memcpy函数如何使用以及memcpy函数的模拟实现。

希望读者们能够好好学习,学有所成!!!???

最后,如果觉得本文写的还不错的话,不要吝啬你们手中的赞哦。???


点击全文阅读


本文链接:http://zhangshiyu.com/post/172953.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1