函数指针可以指向返回值相同但参数个数不同的函数吗?

问题描述:

函数指针可以指向返回值相同但参数个数不同的函数吗?
#include
double f1(double x)
{ return x*x; }
double f2(double x,double y)
{ return x*y; }
double fun(double a,double b)
{
//
f = f2 ;
r2 = (*f)(a,b);
return r1 + r2;
}
main()
{ double x1=5,x2=3,r;
r = fun(x1,x2);
printf("\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n",x1,x2,r);
}
这个程序中 f指向了f1和f2两个不同的函数啊(参数个数不同)为什么可以呢?
1个回答 分类:综合 2014-09-24

问题解答:

我来补答
对不带任何参数的函数来说(注意:不带任何参数和void参数是不同概念),C语言和C++对此有不同的规定.例如一个参数 void f(){}
1.在C语言中,函数原型中不带任何参数的函数,被认为可以在调用时传任何参数进去(没错,正好是相反的),也就是说,f()、f(1)、f("abcd")全都是可通过编译的.
2.在C++语言中,函数原型中不带任何参数的函数,被认为是一个参数为void的函数.也就是说,void f(){}实际上被认为是void f(void){},在实际调用时,不允许传参数进去.
你上面这个例子,在C++中是通不过编译的,但是在C语言中是可以的.比如用TurboC,或者在VC中新建个工程,然后往里面加一个.c文件.注意,添加文件的时候一定要明确写出文件后缀.c,否则只写文件名,不带后缀,默认会新增加一个.cpp文件.在.c文件中,上述程序是可以通过编译的.
 
 
展开全文阅读
剩余:2000
上一页:第九题,详解
下一页:gyyv
也许感兴趣的知识