void*(void *)应用

void*(void*)相关函数

1.给定的内存区域搜索给定的字符

void *find_byte(const void *s,char byte,unsigned long n)
 {
 	   //首先类型强转
       const char *st = (const char *)s;
       //然后遍历字节,按照字节查找
       for(i = 0;i  < n;i++)
       {
          if(byte == *(st + i))
              return (s + i);
       }
       return NULL; 
 }

2.memset函数的定义

void *memset(void *s,int c,unsigned long n)
{
	//强转类型
    char *st = (char *)s;
    //按字节进行赋值
    for(int i = 0;i < n;i++)
    {
        *(st + i) = c;  
    }    
    return s; //返回值为void*,所以要返回参数中的s地址
}

3.memcpy—用于将指定长度的数据从源地址拷贝到目标地址

void *memcpy(void *dest,const void *src,unsigned long n)
{
	char *str1 = (char *)dest;
	const char *str2 = (const char *)src;

	for(int i = 0;i < n;++i)
	{
		*(str1 + i) = *(str2 + i);
	}
	return dest;
}

4.memnove–与memcpy函数不同,该函数能够正确处理源地址和目标地址中出现重叠的情况。

void *memmove(void *dest,const void *src,unsigned long n)
{
	char *str1 = (char *)dest;
	const char *str2 = (const char *)src;
	char buf[n] = {0}; //开一个源地址数据长度的空间
	
	//先将源地址数据复制到所开的空间内
	for(int i = 0;i < n;++i) 
	{
		buf[i] = *(str2 + i);
	}

	//再将所开空间中的数据复制到目标地址
	for(int i = 0;i < n;++i)
	{
		*(str1 + i) = buf[i];
	}

	return dest;
}

总结

	void*是一个特殊的指针类型,可以指向任何类型的地址。
	它的神奇之处在于我们可以根据需要将其实现为需要的类型,这样可以节省代码并实现泛型编程。
	需要注意的是,带类型的指针不能直接指向void的地址。如果我们想在使用void指针时进行操作,我们需要将其强制转换为相应的类型指针。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值