+ -
当前位置:首页 → 问答吧 → 函数指针

函数指针

时间:2011-12-12

来源:互联网

对于函数指针比如定义一个函数指针fun_point,用一个已经定义的函数的函数名初始化它,用(*fun_point)(实参表)和fun_point(实参表)进行函数调用有什么不同吗?fun_point是一个函数指针然后用fun_point(实参表)不就是进行函数的调用了吗?为什么还要(*fun_point)(实参表)呢?可以详细的解释一下吗?谢谢

作者: gongheguoyingpai11   发布时间: 2011-12-12

fun_point();

(*fun_point)();
是等效的。这是规定,无须详细解释。

作者: mingliang1212   发布时间: 2011-12-12

通过函数指针调用和通过函数名调用本质上都是一样的。用函数指针的一个好处是可以高效实现消息映射:
C/C++ code

//针对某一类消息的回调函数
void func1()
{..}

void func2()
{..}

// ...还有func3, func4等等

typedef void (*Callback) ();

void func(int i)
{
    std::map<int, Callback> message_map;
    message_map[0] = func1;
    message_map[1] = func2;

    // 获取消息i,并根据消息i调用相关消息映射函数
    message_map[i]();
}


一般来说,当需要根据某种信息来调用N个函数中的一个,并且这些函数具有相同原型,使用函数指针要比一大推if-else或switch-case方便。

引用楼主 gongheguoyingpai11 的回复:
对于函数指针比如定义一个函数指针fun_point,用一个已经定义的函数的函数名初始化它,用(*fun_point)(实参表)和fun_point(实参表)进行函数调用有什么不同吗?fun_point是一个函数指针然后用fun_point(实参表)不就是进行函数的调用了吗?为什么还要(*fun_point)(实参表)呢?可以详细的解释一下吗?谢谢

作者: tonywearme   发布时间: 2011-12-13