指针循环问题
#include"stdio.h"void move(int array[20],int n,int m)
{
int *p,array_end;
array_end=*(array+n-1);
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;
m--;
if(m>0)move(array,n,m);
}
main()
{
int number[20],n,m,i;
printf("How many numbers?");
scanf("%d",&n);
printf("input %d numbers :\n",n);
for(i=0;i<n;i++)
scanf("%d",&number[i]);
printf("How mang places do you want to move?");
scanf("%d",&m);
move(number,n,m);
printf("Now,they are:\n");
for(i=0;i<n;i++)
printf("%4d",number[i]);
}
解释move函数的作用:move是实现所有的元素循环后移m次,
比如:
1、2、3、4、5;循环后移2次:
第一次:
array_end=5;
执行这个后为:
for(p=array+n-1;p>array;p--)
*p=*(p-1);
1、1、2、3、4
执行: *array=array_end; 后:
5、1、2、3、4
第二次:4、5、1、2、3、
这是网上解释的,有些不明白的是执行for语句后array_end已经是4了,array_end=4的值已经覆盖了原有的值5,怎么赋值给array[0]成了5,请高手指教,谢谢。