判断字符类型函数![](https://img-blog.csdnimg.cn/727236a5980b442f875cc8cc9b7cc535.png)
判断真的话 | 返回非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;
}
这样才不会重叠使用空间,避免调用的时候
结言:本人笔拙,无法将自身的想法一一阐述,希望各位在阅读完后,能给出相应的意见,也欢迎大家在阅读之后提出一些问题,我很乐意帮助大家