函数指针

C/C++编程语言

C语言标准规定，函数指示符（function designator，即函数名字）既不是左值，也不是右值。但C++语言标准规定函数指示符属于左值，因此函数指示符转换为函数指针的右值属于左值转换为右值。 
除了作为sizeof或取地址&的操作数，函数指示符在表达式中自动转换为函数指针类型右值。因此通过一个函数指针调用所指的函数，不需要在函数指针前加取值或反引用（*）运算符。

实例

以下为函数指针在C/C++中的运用
/* 例一：函式指標直接呼叫*/# ifndef __cplusplus
    # include <stdio.h># else
    # include <cstdio># endifint max(int x, int y){
    return x > y ? x : y;}int main(void){
    /* p 是函式指標*/
    int (* p)(int, int) = & max; // &可以省略
    int a, b, c, d;

    printf("please input 3 numbers:");
    scanf("%d %d %d", & a, & b, & c);

    /* 與直接呼叫函式等價，d = max(max(a, b), c) */
    d = p(p(a, b), c); 

    printf("the maxumum number is: %d\n", d);

    return 0;}
/* 例二：函式指標作為參數*/struct object{
    int data;};int object_compare(struct object * a,struct object * z){
    return a->data < z->data ? 1 : 0;}struct object *maximum(struct object * begin,struct object * end,int (* compare)(struct object *, struct object *)){
    struct object * result = begin;
    while(begin != end)
    {
        if(compare(result, begin))
        {
            result = begin;
        }
        ++ begin;
    }
    return result;}int main(void){
    struct object data[8] = {{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}};
    struct object * max;
    max = maximum(data + 0, data + 8, & object_compare);
    return 0;}