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