内存函数简单介绍

1.memcpy
void * memcpy ( void * destination , const void * source , size_t num );
函数作用:把从source开始的num个字节的内容拷贝到从destination开始的空间里。返回destination的起始地址。
优点:相比于strcpy,可以处理更多类型的数据。
警示:最好不要用来处理重叠内存,可能会在拷贝过程中发生重叠使得结果不符合预期。
函数模拟实现:
//模拟实现memcpy
void* my_memcpy(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(dest && src);

	while (num--)//先使用,再--
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}
2.memmove

void*memmove ( void*destination, constvoid*source, size_tnum );

相对于memcpy,可以处理重叠内存的拷贝。参数完全相同。用法也相同。

函数模拟:需要根据源头和目的地的先后位置关系来分类讨论。

//模拟实现memmove
void* my_memmove(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(dest && src);
	if (dest < src)//前到后
	{
		while (num--)//先使用,再--
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
		return ret;
	}
	else//后到前
	{
		*((char*)dest + num) = *((char*)src + num);
	}
	return ret;
}
3.memset

以字节为单位设置内存。

使用方法:假设有一个字符串叫arr,把她从第四个位置开始的六个字节大小的空间的内容都放上x。

memset(arr+3,'x',6);
4.memcmp
int  memcmp ( const  void*  ptr1 , const  void* ptr2 , size_t num );
比较从 ptr1 ptr2 指针开始的 num 个字节。返回值的规律类似于strcpy。

你可能感兴趣的:(c语言学习笔记,算法)