内存函数的用法,内存函数是什么百科
Yyds干货库存
@TOC
1.memcpy函数
Memy代表记忆功能,用法类似strcpy,是作为复制功能存在的。
Strcpy只能用于字符串函数,而memcpy函数可以使用任何类型。
使用任何类型时,使用的参数肯定是void。
void memcpy(const void dest,const void *src,size _ t sum);
这里的和作为字节数传递。
#包含stdio.h
#包含字符串. h
int main()
int arr[10]={ 0 };
int arr2[10]={1,2,3,4,5,6,7,8,9,10 };
memcpy(arr1,arr2,20);//1 2 3 4 5 /20作为字节数,即传递4个整数。
返回0;
}
2.模拟memcpy函数。
#包含stdio.h
#incldue assert.h
Void * my memcpy (constvoid * dest,constvoid * src,size _ tsum)//size _ t表示作为无符号数存在。
断言(dest src);
void * ret=dest
while (sum-)//void *的指针不能解引用和加减,解引用不知道访问多少字节,加减不知道跳过结果字节。
*(char *)dest=*(char *)src;//这里不用自加的原因:因为强制转换类型是临时状态。如果到达,指针会变回void*
dest=(char *)dest 1;
src=(char *)src 1;
返回ret
int main()
int arr 1[10]={ 0 };
int arr2[10]={1,2,3,4,5,6,7,8,9,10 };
mymemcpy(arr1,arr2,20);//通过4次整形
返回0;
}
二、memmove函数
Memmove函数用于处理内存重叠。
与参数memcpy函数相同
voidmemmove(const void dest,const void*src,size _ t sum);
#包含stdio.h
#包含字符串. h
int main()
int arr[]={1,2,3,4,5,6,7,8,9,10 };//将1 2 3 4 5传递给3 4 5 6 7
memmove(arr 2,arr,20);//结果是1 2 1 2 3 4 5
返回0;
}
2.模拟memmove函数。
#包含stdio.h
#include assert.h
void*mymemmove(const void*dest,const void*src,size_t sum)
断言(dest src);
void * ret=dest//返回目的地的初始地址
如果(src dest)//src大于dest指针,则从前向后传递。
while(sum -)
*(char *)dest=*(char *)src;
dest=(char *)dest 1;
src=(char *)src 1;
Else//src小于dest指针时从后向前传递。
while(sum -)
*(char *)(dest sum)=*(char *)(src sum);
返回ret
int main()
int arr[]={1,2,3,4,5,6,7,8,9,10 };
mymemmove(arr 2,arr,20);//20表示字节数,即传递5个整数。
返回0;//1 2 1 2 3 4 5
}
当3 4 5 6 7传递到1 2 3 4 5时
src dest指针从前向后传递。
当1 2 3 4 5传递到3 4 5 6 7时
src dest指针从后向前传递。
三。memcmp功能
几乎都是带strcmp函数的比较函数。
但是,strcmp只能比较字符串的大小。
memcmp函数可以比较任何类型的大小。
int memcmp(const void s1,constvoid s2,size _ t sum);
。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。