内存函数简单介绍

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 );
比较从ptr1ptr2指针开始的num个字节。返回值的规律类似于strcpy。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值