例如输入数据“1 2 3 4 5 6”,m移动3位,则输出数据“4 5 6 1 2 3。
#include <stdio.h>
int main(void)
{
int array[10];
int i,j,n,m,arrayend;
int *p;
printf("输入共有多少个数字:");
scanf("%d",&n);
printf("需要后移多少位:");
scanf("%d",&m);
printf("请依次输入%d个数:\n",n);
for(i=0;i<n;i++) /*输入数据*/
scanf("%d",&array[i]);
for(i=0;i<m;i++)
{
arrayend=*(array+n-1); /*保存指针*/
p=array+n-1; /*指针赋值*/
for(j=n-1;j>0;j--) /*循环移动*/
{
*p=*(p-1);
p--;
}
*p=arrayend; /*回复指针*/
}
printf("输出移动后的%d个数:\n",n);
for(i=0;i<n;i++)
printf("%d ",array[i]);
printf("\n");
return 0;
}
其中,for(i=0;i<n;i++)
printf("%d ",array[i]);输出的是移动后的,我主要就是不知道,移动后的指针是存储在哪里的,为什么用这个输出是移动后的
我自己弄懂了!
我搞懂了,arrayend保存的是数组元素最后一位的值,进入内循环:
for (j=n-1;j>0;j--)
{
*p=*(p-1);
p--;
/*for逆向循环,执行*p=*(p-1),此时*p指向了2,p的地址也指向了2,再执行p--,*p的指此时指向了1,p也指向了1,再执行p--,此时已经循环两次,j已经不大大于0,所以跳出循环,此时的数组为“3 1 2*/
}
进入第二次外套循环,此时arrayend指向的就是2,再执行内套循环,就成了“2 3 1”,我们再输出数组,便就是“231”!
利用指针实现数组的移动,你的这个我也知道,但你能说明这两个循环嵌套吗:
for(i=0;i0;j--) /*循环移动*/
{
*p=*(p-1);
p--;
}
*p=arrayend; /*回复指针*/
}
谢谢您,这位不留名的热心网友,你的回答我有点不懂,因为我正在学C基础。我想知道的是解释上面这两个for循环嵌套,现在我已经从老师那里得到答案了,我已经懂了!总之谢谢您!