您的位置:首页 > 其它

内存操作----memcpy&memmove ---通用swap(强大的)

2016-08-10 16:54 531 查看
 --------------内存操作------------------

在字符串中,我们遇到了好多字符串函数,例如:strlen,直接就可以求字符长度,strcpy可以直接copy两个字符串

那么我们的整型也想这样子的函数,对整型发福利,mencpy ,memmove ,memcmp,memset,memchr这些函数针对所有的都使用,无论你是字符串,还是整型,都ok!

如果你对那些str的函数还有印象,那么在这里去了解;http://blog.csdn.net/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!

好累!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存操作