memcpy函数
1.调用形式void*memcpy(void*p1,void*p2,int n),表示从第二个位置复制n个字节到第一个位置,而指针类型为void的原因是他可以复制整型字符型甚至指针结构体类型的数据
2.在遇到'\0'的时候不会停下来,因为函数执行拷贝靠字节数,且拷贝对象不一定是字符串,遇到'\0'时拷贝'\0'
3.拷贝和被拷贝对象不能重叠,重叠时此函数不处理重叠部分,不执行重叠部分的值的复制(可以取数组内部的项验证一下)
4.模拟实现
#include<stdio.h>void* mymemcpy(void* p1, const void* p2,int n)
{int i = 0;for (i = 0; i < n; i++){*(char*)p1 = *(char*)p2;p1 = (char*)p1 + 1;p2 = (char*)p2 + 1;}return p1;
}
int main()
{int arr[5] = { 1,2,3,4,5 };int arr1[5];mymemcpy((void*)arr1, (const void*)arr, 20);int i = 0;for (i = 0; i < 5; i++){printf("%d", arr1[i]);}return 0;
}
5.改进实现:在后面空间小于前面空间时采用从最后一项向前拷贝
6.当地址重叠的时候使用memmove函数
memset函数
1.作用:设置内存
2.调用形式:void*memset(void* p1,int num,size_t good),一个字节一个字节地将内存空间改变为num的值,改变good个字节
memcmp函数
1.调用形式:int memcmp(const void*p1,const void*p2,size_t num),用法和strcmp相同,只不过这次比的是内存空间,size_t为字节数