--------------内存操作------------------
在字符串中,我们遇到了好多字符串函数,例如:strlen,直接就可以求字符长度,strcpy可以直接copy两个字符串
那么我们的整型也想这样子的函数,对整型发福利,mencpy ,memmove ,memcmp,memset,memchr这些函数针对所有的都使用,无论你是字符串,还是整型,都ok!
如果你对那些str的函数还有印象,那么在这里去了解;http://blog.youkuaiyun.com/qq_35256722/article/details/51799485#
1.memcpy // menmove
void *memcpy(void *dest, const void *src, size_t n);
void *memmove(void *dst, const void *src, size_t count);
函数的功能都是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
区别:
当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy未定义。
#include<stdio.h>
int main()
{
char arr[] = "1234";
memmove(&arr[1],arr,2);
printf("%s\n",arr);
return 0;
}
结果:
这个结果一定,但是在不同的平台上memcpy是不一样的。
知道用法之后,我们看看我们之前写的那些swap这个是很局限的,现在我们写一个通用的。
2.通用swap
之前的swap是在函数传参的时候看着类型传参,那么如果我懒得该,就想换,感觉很为难,而且他的弊端也有一些哦!
现在一个超级厉害的swap,一旦封装起来,就不用再再打开,只需要传值了!
#include<stdio.h>
#include<stdlib.h>
void swap(void *p,void *s,int num)
{
void *tmp = malloc(num);
memcpy(tmp,p,num);
memcpy(p,s,num);
memcpy(s,tmp,num);
free(tmp);
}
int main()
{
int a[] = {1,3};
int b[] = { 2,4};
swap(a,b,3);
return 0;
}
看到他的强大功能了吧!
你在主函数里面只需要传值了,不用去改了!用起来就很方便了!
2,memset
void *memset(void const*a, int ch, size_t n);
3.memchr
void *memchr(void const *dest, int ch, size_t n);
4.memcmp
void *memcmp(void const*dest, void const *src, size_t n);
这里的用法和memcpy的用法相似,那就直接用就好了!
ok!
好累!!!