这个c语言程序为什么这么编出现问题 error C2064: term does not evaluate to a function

#include<stdio.h>
#include<math.h>
float area(float a,float b)
{float c;
c=a*b/2;
return c;
}
float length(float a,float b)
{float d;
d=sqrt(a*a+b*b);
return d;
}
main()
{float x,y,s,l,*p,*q;
printf("please input x and y:");
scanf("%f%f",&x,&y);
p=area;q=length;
s=(*p)(x,y);l=(*q)(x,y);
printf("area=%.2f\nlength=%.2f\n",s,l);}
主函数这样可以运行结果不对,为什么 啊?

main()
{float x,y,s,l;
float (*p)();
float (*q)();
printf("please input x and y:");
scanf("%f%f",&x,&y);
p=area;q=length;
s=(*p)(x,y);l=(*q)(x,y);
printf("area=%.2f\nlength=%.2f\n",s,l);}

你的函数使用方式不对
你定义了area和length两个函数,但你在第17行里面却把它当成变量在使用
(指p=area;q=length;这种使用方式)
函数不是这样用的,应当是写上函数名和参数(参数写在括号里)
如s=area(x,y);这样
另外,你非要使用函数指针的话,你的函数返回值应是指针类型,所以area和length这两个函数在刚开始定义的时候必须写*号追问

{float x,y,s,l;
float (*p)();
float (*q)();
printf("please input x and y:");
scanf("%f%f",&x,&y);
p=area;q=length;
s=(*p)(x,y);l=(*q)(x,y);
printf("area=%.2f\nlength=%.2f\n",s,l);}
这样可以运行但结果不对,为什么啊?大神

追答

你的函数指针使用方式不对,应该是
指针=&函数名 (因为指针必须指向一个地址,而函数名不像数组名,不代表函数地址)
所以应该是p=&area这样
另外,由于这两个函数都带有参数,你的函数指针也得有参数才行

追问

那到底该怎么改呢?将p=&area;q=&length改成这样,结果也不对

追答

另外你在定义*p和*q的时候要在后面括号里写参数
所以要像
float (*p)(float,float);
这样两个参数才可以通过函数指针的方式准确地传到指向的函数里

追问

谢谢大神啦!按照你说的结果是对的,但我模仿书上写的,为什么书上它这样写可以呢?

温馨提示:答案为网友推荐,仅供参考
相似回答