10-处理n个数的数组,将其中一部分数据进行前移或后移

内存重叠:源数据和目标数据存在内存相同的情况.一定要注意复制数据的方向,如果往低地址(往前),先复制前面的数据, 如果往高地址(往后),先复制后面的数据

#include 
#include 
//将长度为n的数组arr的最后m个数字移到最前面
void Move(int *arr,int n,int m)
{
	//创建能够存放m个数字的数组
	int *brr = (int *)malloc(m*sizeof(int));

	//将最后的m个数字,复制到brr中
	int i;
	for(i=0;i<m;i++)//i是brr下标
	{
		brr[i] = arr[n-m+i];
	}

	//将arr中前面的n-m个数据后移(必须从后往前移)
	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);
	for(i=0;i<n;i++) 
	{
		printf("%d ",arr[i]);
	}
}

int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	Move(arr,sizeof(arr)/sizeof(arr[0]),3);
	return 0;
}

你可能感兴趣的:(C语言的学习,其他)