
void* memcpy(void* destination, const void* source, size_t num);--介绍:
--功能:
--参数:
--返回值:拷贝完成后,返回目标空间的起始地址
#include <string.h>
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
memcpy(arr2, arr1, 16);
for (int i = 0; i < 5; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}#include <string.h>
#include <assert.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{
//先将dest初始地址存上,防止后续操作覆盖初始地址
void* ret = dest;
assert(dest && src);
//循环直接将字节数当条件,更简单
while (num--)
{
//因为都是void*类型,无法直接解引用,在这里进行强转
//强转为char*, 是因为可以按照1字节进行访问,但是只有char*可许,其余不行
*(char*)dest = *(char*)src;
//强转是临时的,再次强转
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
my_memcpy(arr2, arr1, 16);
for (int i = 0; i < 4; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}void* memmove(void* destination, const void* source, size_t num);--介绍:
--功能:
--参数:
--返回值:拷贝完成后,返回目标空间的起始地址
#include <string.h>
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
memmove(arr2, arr1, 16);
for (int i = 0; i < 4; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}#include <string.h>
#include <assert.h>
void* my_memmove(void* dest, const void* src, size_t num)
{
//先将dest初始地址存上,防止后续操作覆盖初始地址
void* ret = dest;
assert(dest && src);
//当dest在左边与src重叠,前往后进行拷贝
if (dest < src)
{
*(char*)dest = *(char*)src;
//往后进行
dest = (char*)dest + 1;
src = (char*)src + 1;
}
//右边重合、没重合:后向前
else
{
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//int arr2[20] = { 0 };
my_memmove(arr1 + 2, arr1, 16);
for (int i = 0; i < 4; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}void* memset(void* ptr, int value, size_t num);--介绍:
--功能:
--参数:
--返回值: 返回的是要设置的内存空间的起始地址。
#include <string.h>
int main()
{
char arr[] = "hello world";
memset(arr + 2, 'x', 6);
printf("%s", arr);
return 0;
}--但是注意,下面这串代码就不能实现:
int main()
{
int arr1[] = { 0 };
memset(arr1, 1, 40);
return 0;
}--但是可以设置为0.
--当有一块内存空间需要设置内容的时候,就可以使用memset函数,值得注意的是memset函数对内存单元的设置是以字节为单位的。
int memcmp(const void* ptr1, const void* ptr2, size_t num);--介绍:
--功能:
--参数:
--返回值:

#include <string.h>
int main()
{
char arr1[] = "abcdefgh";
char arr2[] = "abcdef";
int ret;
ret = memcmp(arr1, arr2, 5);
if (ret > 0)
printf(">\n");
else if (ret < 0)
printf("<\n");
else
printf("=");
return 0;
}--如果要比较2块内存单元的数据的大小,可以使用 memcmp 函数,这个函数的特点就是可以指定比较长度memcmp 函数是通过返回值告知大小关系的。
相关知识回顾: #C语言——学习攻略:探索字符函数和字符串函数(一)--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现 #C语言——学习攻略:探索字符函数和字符串函数(二)--strcmp、strstr的使用和模拟实现以及strncpy、strncat、strncmp、strock、strerror函数的使用
结语:本篇文章到此结束,呈现了内存函数的内容,内涵丰富,大家要多次回顾,如果这篇文章对你的学习有帮助的话,欢迎一起讨论学习,你这么帅、这么美给个三连吧~~~