我是靠谱客的博主 坚定心情,最近开发中收集的这篇文章主要介绍C语言:@ 模拟实现内存操作函数(memcpy、memset、memcmp、memmove),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
以mem开头的函数,其操作以字节为基本单位,与类型无关(因为参数都为void*,即接收所有类型)
- void 不能定义变量,因为不同的编译器中规定的大小不同
- void*可以定义变量,它也是指针,大小为4或8,但不能解引用,解引用后为void,就不知道指针指向的是谁了
- void*一般用来用来传值,可以接收任意类型,常见用来接收地址类型
memcpy 内存拷贝
void *my_memcpy(void *dst, void *src, int num)
{
assert(dst);
assert(src);
//得有一个容器
char *dst_p = (char*)dst;//强转成char* 因为以字节为单位,char 占一个字节
char *src_p = (char*)src;
//拷num个字节,循环一次拷一个
while (num--)
{
*dst_p = *src_p;
dst_p++, src_p++;
}
return dst;
}
int main()
{
char *arr = "hello world";
char arr1[32];
my_memcpy(arr1, arr, strlen(arr)+1);//按字节拷贝 +1是给结尾带'