|
发表于 2014-6-27 18:54:33
|
显示全部楼层
本帖最后由 santaclaus 于 2014-6-27 21:53 编辑
在c\c++中使用函数名和函数指针调用都是合法的
1、在 C/C++ 中总是使用函数指针的形式来调用函数。
2、即使在函数调用中使用的是函数名(代表函数类型),也会被转换为函数指针使用,这就是默认的 function-to-pointer 转换。
如:int max(int a,int b) //max是个函数,该函数类型为(具有两个int形参,和一个int型返回值的函数)
//调用时:
1、调用方式1:max(1,2) ,利用函数名(函数类型)根据function-to-pointer,会被自动转换为指针形式。
2、调用方式2::(*max)(1,2),max先转为函数指针,而*max又表示函数类型,即相当于max(1,2),根据function-to-pointer,最后又转成函数指针。
所以方式1与方式2是等价的。根据function-to-pointer原则,max(1,2)=(*max)(1,2)=(**max)(1,2)=...=(*******max)(1,2)
而ptr[0]存的就是max函数的地址。
所以,对函数调用时,
ptr[0](1,2) <===> max(1,2)
(*ptr[0])(1,2) <===> (*max)(1,2)
不知对否,请大侠指正。。。
|
|