C语言指针疑问。

键盘输入2个数m,n求第m个数到第n个数的和。本人不理解为什么下面voidmain前的语句意思。特别是i=0那里如果我输入的数是m=3,n=7的时候,我的理解是i0一直加... 键盘输入2个数m,n 求第m个数到第n个数的和。本人不理解为什么下面void main前的语句意思。特别是i=0那里 如果我输入的数是m=3,n=7的时候,我的理解是i0一直加到i7 .可真实的是i3加到i7,有高手解答下详细的程序过程吗?当我输入m=3,n=7的时候.
#include<stido.h>
{
int i,s=0;
for(i=0;i<n;i++,q++)
s+=*q;
return s;
}
void main()
{
int m,n,a[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
printf("Please input m and n(m<n<10):\n");
scanf("%d,%d",&m,&n);
p=a+m-1;
printf("%d\n",sum(p,n-m+1));
}
展开
 我来答
逻辑错误2021
2011-12-22 · TA获得超过757个赞
知道小有建树答主
回答量:986
采纳率:0%
帮助的人:492万
展开全部
a[ i ]这个数组,其实可以理解成一个指向数组的指针.它可以写成*( a + i )
你下面写的 p = a + m -1; 可以写成 p = *( a + m - 1 ); 也就是 p = a[ m -1 ];这时候 p 其实就是a[2]
传参的时候把指针 p 传过去了.还有 n - m + 1,也就是 7 - 3 + 1 ,也就是 5 ;

传参过去以后, q = a[ 2 ] 上面解释过了.n = 5

sum函数加出来的结果是从a[ 2 ]加到a[ 7 ] ,也就是 3 + 4 + 5 + 6 + 7 = 25.

希望你满意.
追问
我输入的是3 和7  怎么就变传n=5过去了。可以写出它累加和的过程吗?那样我看得清楚点。初学者请包涵。
追答
printf("%d\n",sum(p,n-m+1)); 这里是调用sum函数的.这里传了两个参数:一个是p也就是指针.一个是( n - m + 1 ),你在上面输入的时候,m 输入的是3,n输入的是7. ( n - m + 1 ) = ( 7 - 3 + 1 ) = 5.

{
int i,s=0;
for(i=0;i<n;i++,q++)
s+=*q;
return s;
} 这个你没有写全,我猜你应该是这样写的.
int sum ( int* p, int n ) //在这个地方,*p = a[ 2 ], n = 5. 这里的值是从main函数传参过来的.
{
int i,s=0;
for(i=0;i<n;i++,q++)
s+=*q;
return s;
}
longinus_dean
2011-12-22 · TA获得超过2282个赞
知道小有建树答主
回答量:1097
采纳率:50%
帮助的人:1620万
展开全部
根据这个sum(p,n-m+1)调用可知,在函数sum里面的n实际上是main函数里面的n-m+1而不是main函数里面的n,这个逻辑转换关系你要理清

也就是说实际上是运行i=0到i<n-m+1次循环

⋯⋯这个函数写的还真是相当莫名其妙⋯⋯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式