判断字符类型函数和内存函数

判断字符类型函数

     判断真的话

返回非0的值  

     判断假的话

返回0

字符转换函数

lower大写转小写

upper小写转大写

内存函数 

memcpy函数

内存函数是以字节来计算的

下面是 memcpy() 函数的声明。

                void *memcpy(void *str1, const void *str2, size_t n)

参数

  • str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
  • str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
  • n -- 要被复制的字节数。
  • 返回值

  • 该函数返回一个指向目标存储区 str1 的指针。

模拟实现

模拟实现是最能体现这个库函数的实现过程的

代码

void* my_memcpy(void* dest, const void* str, size_t n)
{
	void* ret = dest;
	while (n--)
	{
		*(char*)dest = *(char*)str;//赋值没啥好说的
		(char*)dest = (char*)dest + 1;//
		(char*)str = (char*)str + 1;
	}
	return ret;
}

为什么在这里不能这样去移动指针?

(char*)dest++;

这是因为强制类型转换是临时的!在后置++的时候这个强制类型转换还没有发挥作用了  这是因为++的优先级大于强制转换的,然后void*指针是不能进行加减的     

memmove函数

参数

 void *memmove(void *str1, const void *str2, size_t n)

  • str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
  • str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
  • n -- 要被复制的字节数。
  • 返回值

  • 该函数返回一个指向目标存储区 str1 的指针.

返回值

该函数返回一个指向目标存储区 str1 的指针。

模拟实现

void* my_mommove(void* dest, void* str, size_t n)
{
	void* ret = dest;
	if (dest < str)//前--后//从str的首部复制给dest
	{
		int i;
		for (i = 0; i < n; i++)
		{
					*(char*)dest = *(char*)str;
		(char*)dest = (char*)dest + 1;
		(char*)str = (char*)str + 1;
		}
	}
	else//从str的尾部开始复制给dest
	{
		while (n--)
		{
			*((char*)dest+n) = *((char*)str+n);
		}
	}
	return ret;
}

这样才不会重叠使用空间,避免调用的时候


结言:本人笔拙,无法将自身的想法一一阐述,希望各位在阅读完后,能给出相应的意见,也欢迎大家在阅读之后提出一些问题,我很乐意帮助大家

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

----K1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值