内存操作----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未定义。
结果:
这个结果一定,但是在不同的平台上memcpy是不一样的。
知道用法之后,我们看看我们之前写的那些swap这个是很局限的,现在我们写一个通用的。
2.通用swap
之前的swap是在函数传参的时候看着类型传参,那么如果我懒得该,就想换,感觉很为难,而且他的弊端也有一些哦!
现在一个超级厉害的swap,一旦封装起来,就不用再再打开,只需要传值了!
看到他的强大功能了吧!
你在主函数里面只需要传值了,不用去改了!用起来就很方便了!
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!
好累!!!
在字符串中,我们遇到了好多字符串函数,例如: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!
好累!!!
相关文章推荐
- 内存操作函数memcpy和memmove
- 操作内存利器memset,memmove,memcpy
- 内存操作函数memcpy,memccpy,memmove,memchr,memcmp,memicmp,memset
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- OpenGL高级特性之利用Image内存模型&计算着色器&原子操作实现(直方图模型)通用计算
- 内存操作函数memcpy,memccpy,memmove,memchr,memcmp,memicmp,memset
- 模拟实现内存操作函数memcpy、memmove
- 【基础C&C++】内存拷贝strcpy,memcpy,memmove,strncpy源码
- C语言中内存操作函数 - memcpy ,memmove
- 内存操作函数memcpy、memmove
- 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()
- C语言之内存操作:memset & memcpy
- C内存操作函数memmove()与memset()区别
- 内存拷贝strcpy(),memcpy(),memmove()比较
- adb工具(通用的调试工具、debug工具)&操作命令详解
- strcpy,memcpy,memmove和内存重叠分析
- 使用js事件机制进行通用操作&特定业务处理的协调
- [整理]内存重叠之memcpy、memmove
- strcpy,memcpy,memmove和内存重叠分析
- memcpy 内存操作