函数指针实例三

#include <stdio.h>
/* 
            pf(void)            pf是一个无参数函数
          * pf(void)               pf是一个无参数函数,它的返回值是一个指针
        ( * pf(void) ) (void)      pf是一个无参数函数,它的返回值是一个无参数函数的指针
      * ( * pf(void) ) (void)       pf是一个无参数函数,它的返回值是一个无参数函数的指针,这个函数的返回值又是一个指针
    ( * ( * pf(void) ) (void) ) (void)  pf是一个无参数函数,它的返回值是一个无参数函数的指针,这个函数的返回值又是一个无参数函数的指针
int ( * ( * pf(void) ) (void) ) (void)  pf是一个无参数函数,它的返回值是一个无参数函数的指针,这个函数的返回值又是一个无参数且返回值为int的函数的指针。 
*/

/* 
        int    pf(void)            
        int *pf(void)      pf无参数函数,返回int*指针   
       int ( * pf(void) ) (void)    pf无参数函数,返回一个无参数函数的指针,该函数返回int类型
     int * ( * pf(void) ) (void)  pf无参数函数,返回值是无参数函数的指针,该函数又返回一个int*指针     
int ( * ( * pf(void) ) (void) ) (void)   
declare pf as function (void) returning pointer to function (void) returning pointer to function (void) returning int

void ( * ( * pf(void) ) (void) ) (void) 
declare pf as function (void) returning pointer to function (void) returning pointer to function (void) returning void

*/



int myadd( int a, int b)
{
    int z = a + b;
    return z;
}
int mysub(int a, int b)
{
    int z = a - b;
    return z;
}
int mymul(int a, int b)
{
    int z = a*b;
    return z;
}
int mydiv(int a, int b)
{
    int z = a/b;
    return z;
}

//array of function pointers,
int (* opfunctptr [ ] ) ( int x, int y) = { myadd, mysub, mymul, mydiv };

typedef int (*calc)(int x, int y );

//function returning the function pointer of type int (*calc)(int x, int y )
calc retmathfunc(int index)
{
    return opfunctptr[index];
}

int main(int argc, char* argv[])
{
    int choice, p1, p2, res;
    int (*calculator)(int x, int y);
    printf("Type -1 to quit\n");
    printf("Type 0 - add, 1 - sub, 2 - mul, 3 - div\n");
    scanf("%d", &choice);
    
    while( choice != -1)
    {
        calculator = retmathfunc(choice); //returns function pointer
            
        printf("Param1\n");
        scanf("%d", &p1);
        printf("Param2\n");
        scanf("%d", &p2);
        
        res = calculator(p1, p2); //calling function pointer
        printf("res = %d\n", res);
    
        printf("Type 0 - add, 1 - sub, 2 - mul, 3 - div\n");
        scanf("%d", &choice);
    }
    
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/CodeWorkerLiMing/p/9622988.html