c语言指针求解!!!!!!!!!!

#include<stdio.h>intf(int);inta(int(*pf)(int));intmain(void){printf("%d\n",a(f));retu... #include <stdio.h>
int f(int);
int a(int (*pf)(int ));
int main(void){
printf("%d\n",a(f));
return 0;
}
int f(int i){
return i*i+i-12;
}
int a(int (*pf)(int)){
int n=0;
while(pf(n))
++n;
return n;
}
改程序运行结果为什么是3,求解释!!!!
展开
 我来答
眼神之蓝
2014-11-20
知道答主
回答量:62
采纳率:0%
帮助的人:24万
展开全部
#include <stdio.h>

int f(int);
int a(int (*pf)(int ));

int main(void)
{
printf("%d\n",a(f)); //结果就是3
return 0;
}
int f(int i) {
return i*i+i-12; //(i-3)(i+4)
}

int a(int (*pf)(int)) //函数a,参数函数指针,参数是int
{
int n=0;
while(pf(n)) //当pf(n) = 0时结束循环,也就是说此时n = 3
++n; //由于是++n,是先加然后给n值,当上一次给的n为2时,运行这条指令侯为3,然后结束循环,此时n = 3,就返回3
return n; //返回3
}

你的错主要是没有区分n++(先用n值,然后n+1)和++n(先n+1然后使用n值)
int a(int (*pf)(int))既然是指针,我给你说怎么看嘛,显示a后面一个括号,表示函数。
返回int,参数也是个int,里面pf前面一个*表示是一个指针,后面有个括号,表示函数,也就是函数指针

谢谢采纳!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silenceandluo
2014-11-20 · TA获得超过1046个赞
知道小有建树答主
回答量:713
采纳率:0%
帮助的人:273万
展开全部
int n=0;
while(pf(n))
++n;
第一次调用 pf(0) return 0*0+0-12=-12 while()条件不为0 ++n n=1
第二次调用 pf(1) return 1*1+1-12=-10 while()条件不为0 ++n n=2
第三次调用 pf(2) return 2*2+2-12=-6 while()条件不为0 ++n n=3
第四次调用 pf(3) return 3*3+3-12=0 while()条件为0 循环结束
所以return n=3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ea431b0
2014-11-20 · TA获得超过748个赞
知道小有建树答主
回答量:1096
采纳率:50%
帮助的人:538万
展开全部
pf是一个函数指针
int (*pf) (int);
这个函数指针可以指 返回int参数类型为int的函数,这里指向了f函数,计算f(0)=-12 <0,f(1) = -10<0,f(2)=-6<0,f(3)=0,所以应该在n=3时退出while循环,所以改为a函数里的while语句改为while(pf(n) <0)。
int a(int (*pf)(int))
{
int n=0;
int y=0;

while(pf(n)<0)

++n;

return n;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xaviet
2014-11-20 · TA获得超过129个赞
知道小有建树答主
回答量:197
采纳率:50%
帮助的人:171万
展开全部
#include <stdio.h>
int f(int); //函数f,参数为整形
int a(int (*pf)(int )); //函数a,参数为函数指针pf
int main(void){
printf("%d\n",a(f)); //调用函数a,参数为函数f的指针,最终函数a会返回3
return 0;
}
int f(int i){
return i*i+i-12; //注意当i=3时,表达式值为0,返回0
}
int a(int (*pf)(int)){
int n=0;
while(pf(n)) //调用函数,在main中传进来的是函数f,当n为3时函数f的为0时退出循环
++n;
return n; //返回3
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草丛里的落叶
2014-11-20 · TA获得超过422个赞
知道小有建树答主
回答量:650
采纳率:100%
帮助的人:315万
展开全部
循环了3次,++n了3次;//当n=3时,pf返回0,while(pf(n))循环结束,主函数打印返回值n。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式