两天没更新了,其实我的目标是日更的,可是…事与愿违啊。不过我总是知道了无法上传图片的原因了,原因就是我是联通的校园卡,在csdn上无法上传图片,换成我自己的卡就可以了,问题解决了!
memcpy函数
memcpy函数介绍
什么!你说你看不懂英文,哎呀,用翻译啦,不过英语的学习也很重要哦~
memcpy函数的使用
#include <stdio.h>
int main()
{
int arr1[20] = { 0 };//目的地
int arr2[] = { 1,2,3,4,5,6,7,8,9,10};//源头
memcpy(arr1, arr2, 20);
int i = 0;
while (i < 10)
{
printf("%d ", arr1[i]);
i++;
}
return 0;
}
运行结果
看到这个相信大家会觉得和strcpy函数有些相似吧,其实是差不多的,memcpy函数返回的是void*,意味着他不止可以拷贝字符还可以拷贝其他类型,这儿就是内存函数的优势。
memcpy函数的模拟实现
一些必要的解释我都放在了代码的注释中。大家好好看看哈,不会的话评论问问吧~
#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest, void* sou, size_t sum)//因为不知道使用者用memcpy函数拷贝什么类型,所以我们就要用void接收。
{
assert(dest && sou);
int count = sum;//count作为计数器
void* ret = dest;//记录dest的首元素地址,方便后续打印
while (count--)
{
*(char*)dest = *(char*)sou;//因为viod不能随便更改,所以这里我们要用强制类型转换
dest = (char*)dest + 1;//因为强制类型转换具有临时性,所以后续还要强转。且因为强转在一些编译器中不能使用++,所以这里直接用的+1.
sou = (char*)sou + 1;
}
return ret;
}
int main()
{
int arr1[20] = { 0 };
int arr2[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memcpy(arr1, arr2, 20);
int i = 0;
while (i < 10)
{
printf("%d ", arr1[i]);
i++;
}
return 0;
}
memcpy函数的一些缺陷
有一个数组 arr[]={1,2,3,4,5,6,7,8,9}
如果我们想把arr拷贝到arr+2中
结果是1 2 1 2 1 2 1 8 9 10
为什么呢,下集讲一个memmove函数,再解释哈。
这里是结衣,分享学的的编程知识。关注结衣喵~