内存的重叠问题:
-
例题:将长度为n的数组arr,后面m个数据移到最前面(从后往前移动数据)。
-
解题思路:需要先定义一个中间变量tmp,将移动的m个数据进行存放,然后再将数组arr中的数据,由最后一个开始,依次往后移动m距离,然后将变量tmp中的数据移入数组arr中,数组arr的数据移动完成。
-
图解:
-
函数
//将长度为n的数组arr,后面m个数据移到最前面
void Move(int *arr,int n,int m)
{
if(arr==NULL || n<=0 || n<m)//判断
{
return ;
}
int *brr = (int *)malloc(m*sizeof(int));
//将arr中后面的m个数据移到到brr中
int i;
for(i=0;i<m;i++)
{
brr[i] = arr[n-m+i];
}
//将arr中前面的数据后移
for(i=n-m-1;i>=0;i--)//从后往前
{
arr[i+m] = arr[i];
}
//将brr数据移到arr中
for(i=0;i<m;i++)
{
arr[i] = brr[i];
}
free(brr);
}