C语言,括号里写个(float,float,float)就错了,填一个也报错。运行不出来。这是为什

C语言,括号里写个(float,float,float)就错了,填一个也报错。运行不出来。这是为什么啊?这里的double(*f)()要空着吗?

double (*f)();
这句话的意思是定义一个函数指针,名字叫f,这个函数指针指向返回值是double类型,参数是void类型的函数。

f=f1;
f1是一个返回值是double类型,参数是double类型的函数。这里强制将f1转换成返回值是double类型,参数是void类型的函数,然后赋值给函数指针f;

r1=(*f)(a);
这句话是将a作为参数调用函数指针f,编译器会对函数的入参做检查。f要求参数是void,所以你可以传参数,也可以不传参数,编译器都不会报错,所以这么写是正确的。
编译器不管f指向的是哪一个函数,他只管f的声明类型。声明类型参数是void,即使指向f1函数,参数是double,仍然可以不传参数,直接写成
r1=(*f)();
都是可以的。

但是如果你写成
double (*f)(float,float,float);
那么后面调用函数f的时候,必须传入三个或以上的参数才可以。但是代码里面只传递了一个参数,那肯定会报错的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-12
double (*f)(double p,...);

追问

不明白?可以说详细点吗?初学者一枚

相似回答