当前位置:首页 » 《随便一记》 » 正文

C语言中的内存函数你知道多少呢?

20 人参与  2024年02月11日 08:51  分类 : 《随便一记》  评论

点击全文阅读


目录

 ​编辑

1. memcpy的使用和模拟实现

1.1函数介绍

​编辑

1.2函数的使用

1.3模拟实现

2. memmove的使用和模拟实现

2.1函数介绍

2.2函数的使用

2.3模拟实现

3. memset函数的使用

3.1函数介绍

3.2函数的使用

​编辑

4. memcmp函数的使用

4.1函数介绍

4.2函数的使用

完结散花


 

                           不是每个人都能做自己想做的事,成为自己想成为的人。

                                                  克心守己,律己则安

创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 

1. memcpy的使用和模拟实现

1.1函数介绍

注:使用该函数需要引用头文件#include<string.h> 

1.2函数的使用

假设我们要将arr1中的前20个字节拷贝到数组arr2中~

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

 运行效果如下~

我们可以看到屏幕上打印了1 2 3 4 5 ~怎么样,使用是不是很简单呢?

1.3模拟实现

那让我们模拟实现一下这个函数,相信我们会对其有更加深刻的理解呢~

.  模拟实现之前我们还要了解一下指针类型void*

.  当我们无法确定传递过来的实参的指针是什么类型时,我们就可以用void*来接受

.  但我们还要知道的一点是对于指针void*,我们无法对其进行指针运算的

void* my_memcpy(void* dest, const void* src, size_t num){assert(dest && src);//判断指针的有效性void* ret = dest;//用ret记录dest目标函数的起始位置while (num--){//强制类型转化为char*对其进行指针运算*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;//*((char*)dest)++ = *((char*)src)++;这种写法在VS2022上可行,但不能确保所有编译器上都可行}return ret;}

2. memmove的使用和模拟实现

2.1函数介绍

2.2函数的使用

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

我们来看一下运行效果~

2.3模拟实现

那让我们模拟实现一下这个函数,相信我们会对其有更加深刻的理解呢~

void* my_memmove(void* dest, const void* src, size_t num){assert(dest && src);void* ret = dest;if (src>dest)//从前往后复制{while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else//从后往前复制{dest = (char*)dest + num-1;src = (char*)src + num-1;while (num--){*(char*)dest = *(char*)src;dest = (char*)dest - 1;src = (char*)src - 1;}//while (num--)//{//*((char*)dest + num) = *((char*)src + num);//}这样写也行}return ret;}

 算法的图解放在下面啦~

3. memset函数的使用

3.1函数介绍

3.2函数的使用

int main(){int arr[10] = { 0 };memset(arr, 1, 20);return 0;}

调试我们看一下效果~

是不是很简单呢~


4. memcmp函数的使用

4.1函数介绍

4.2函数的使用

int main(){int arr1[10] = { 1,2 };int arr2[10] = { 1,3 };printf("前4个字节比较%d\n", memcmp(arr1, arr2, 4));printf("前5个字节比较%d\n", memcmp(arr1, arr2, 5));printf("前8个字节比较%d\n", memcmp(arr1, arr2, 8));return 0;}

我们来看一下运行效果~

完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~


点击全文阅读


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

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

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

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

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