提示:这里可以添加本文要记录的大概内容:
内存,就像计算机的大脑,对于程序而言至关重要。而内存函数,就是程序员的“魔法工具”,让我们能够更灵活地处理数据。
这篇博客将揭开内存函数的神秘面纱,从简单的分配和释放内存,到复杂的拷贝和比较操作。我们将用通俗易懂的语言,探讨这些函数是如何帮助我们更好地编写程序的。
通过深入了解这些内存函数,我们不仅可以提高代码的效率,还能避免让程序“头疼”的内存错误。让我们一同踏入内存函数的世界,让编程变得更简单、更有趣。
提示:以下是本篇文章正文内容,下面案例可供参考
注意:
> 查询函数如何使用可以通过这个网站
void * memcpy ( void * destination, const void * source, size_t num );
- 函数memory从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
- 这个函数在遇到'\0'的时候并不会停下来。
- 如果source和destination所指向的内存空间有任何的重叠,复制的结果都是未定义的
#include
#include
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[5] = { 0 };
memcpy(arr2, arr1, 8);
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
//memcpy的模拟实现
#include
#include
void* my_memcpy(void* dest, const void* source, size_t num)
{
void* ret = dest;
while (num--)
{
*(char*)dest = *(char*)source;
((char*)dest)++;
((char*)source)++;
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[5] = { 0 };
my_memcpy(arr2, arr1, 8);
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
运行结果和之前一致
void * memmove ( void * destination, const void * source, size_t num );
和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。
如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。
//memmove的使用
#include
#include
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[5] = { 0 };
memmove(arr1+2, arr1, 12);
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
//memmove的使用
#include
#include
//考虑两种情况,一种是src在dest后面这时候拷贝时候源数据不会覆盖,第二种情况则需要倒序拷贝
void* my_memmove(void* dest, const void* src, size_t num)
{
void* ret = dest;
if (dest <= src || (char*)dest >= ((char*)src + num))
{
while (num--)
{
*(char*)dest = *(char*)src;
((char*)dest)++;
((char*)src)++;
}
return ret;
}
else
{
(char*)dest += num-1;
(char*)src += num-1;
while (num--)
{
*(char*)dest = *(char*)src;
((char*)dest)--;
((char*)src)--;
}
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5 };
my_memmove(arr1+2, arr1, 12);
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
void * memset ( void * ptr, int value, size_t num );
memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。
使用:
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
内存函数简要总结:memcpy、memmove、memset和memcmp
memcpy函数:
memcpy(destination, source, size);
memmove函数:
memmove(destination, source, size);
memset函数:
memset(destination, value, size);
memcmp函数:
memcmp (memory1, memory2, size);
这些内存函数是C语言中常用的工具,用于实现内存的复制、移动、初始化和比较。选择适当的函数取决于具体的需求,但要确保处理重叠的情况以保障程序的正确性和性能。