目录
编辑
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; }
我们来看一下运行效果~
完结散花
好了,这期的分享到这里就结束了~
如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~
如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~
我们下期不见不散~~