内存重叠
来源:互联网 发布:navicat for linux 64 编辑:程序博客网 时间:2024/06/05 04:12
内存重叠要考虑拷贝数据的方向。
往前移,先移动前面的数据;
往后移,先移动后面的数据。
eg:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
往前移,先移动前面的数据;
往后移,先移动后面的数据。
eg:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//n表示数组长度
//m表示需要移到的后半段的数据长度
(把数组中后m个数据放到数组最前面)
void Move(int *arr,int n,int m)
{
if(arr==NULL || n<=0 || m<0 || n<m)
{
return ;
}
int *p = (int *)malloc(m*sizeof(int));
int i;
for(i=0;i<m;i++)
{
p[i] = arr[n-m+i];
}
for(i=n-m-1;i>=0;i--)
//向后移,先移后面的数据
避免移动数据时,覆盖原始数据
{
arr[i+m] = arr[i];
}
for(i=0;i<m;i++)
{
arr[i] = p[i];
}
free(p);
}
void Show(int *arr,int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
Show(arr,sizeof(arr)/sizeof(arr[0]));
Move(arr,sizeof(arr)/sizeof(arr[0]),3);
Show(arr,sizeof(arr)/sizeof(arr[0]));
//输出:8 9 10 1 2 3 4 5 6 7
return 0;
}
阅读全文
0 0
- 内存重叠
- 内存重叠
- 内存重叠
- 内存重叠
- 内存重叠
- memcpy 内存重叠问题
- memcpy内存重叠问题
- C++中“内存重叠”
- 约瑟夫环、内存重叠
- 粗浅讨论内存重叠
- 浅聊内存重叠
- C语言:内存重叠
- memcpy内存重叠的解决
- 有关内存重叠的问题
- memmove函数与内存重叠
- 内存重叠之strcpy&memmove
- C语言:内存重叠问题
- 手动实现memcpy涉及内存重叠与不重叠情况
- typedef
- [C++技巧篇1]enable_if,lambda
- string相关的函数
- 结构体的大小
- MyBatis的Mapper接口以及Example的实例函数及详解
- 内存重叠
- SQLAlchemy用法指南
- jil
- Private感染扫描工具
- 1800万知乎用户的爬取
- 可变参数列表,stdarg
- dbcp连接池简单封装
- golang设计模式(5)原型模式
- HTTP协议介绍(分析tinyhttpd【上】)