求解释这个C语言程序,谢谢!!!

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。解:#defineN10#inclu... 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
解:
#define N 10
#include<stdio.h>
void shift(float*p,int x)
{
floata[N],*q,*o;int i;
o=a;q=p;
for(i=0;i<x;i++)
*(o+i)=*(q+N-x+i); //什么意思?什么作用
for(p=p+N-1;p>=q;p--) //什么意思?什么作用
*p=*(p-x); //什么意思?什么作用
for(i=0;i<x;i++) //什么意思?什么作用
*(q+i)=*(o+i); //什么意思?什么作用
return;
}
void main()
{
floatshuzhu[N],*u,*v;
inth,i;u=v=shuzhu;
scanf("%f",&h);
for(;u<v+N;u++)
scanf("%f",u);
shift(v,h);
for(u=v;u<v+N;u++)
printf("%.2f",*u);
printf("\n");
}
展开
 我来答
KFMonkey
2014-03-16 · 超过21用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:47.6万
展开全部
*(o+i)=*(q+N-x+i); //循环取p数组里第x元素到数组最后一个元素到新的o数组中
其中:
q+N 指向最后一个元素;
q+N-x 指向要求移动的若干元素的第一个位置(一共x个元素要移动)
q+N-x+i i循环来取x个需要移动的元素

for(p=p+N-1;p>=q;p--)
*p=*(p-x); //循环,将剩余的不需要前移的元素往后移动x个位置(结果就是整天前边空出x个位置)

for(i=0;i<x;i++)
*(q+i)=*(o+i); //将o数组中保存的原先的q数组中的后x个元素,转移到o元素的前x个位置

再有不清楚的地方咱们再讨论。
追问
for(p=p+N-1;p>=q;p--) 
*p=*(p-x); //循环,将剩余的不需要前移的元素往后移动x个位置(结果就是整天前边空出x个位置)

这里,为什么p>=q呢?
还有就是:p和q是不是一样的?为什么最后又改成了*(q+i)=*(o+i)?不是*(p+i)=*(o+i)吗?
追答
q和p指向同一块内存。应该是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式