typedef使用大全(指向函数的指针)

来源:互联网 发布:红磷分析纯价格淘宝 编辑:程序博客网 时间:2024/05/17 00:02

转自http://blog.chinaunix.net/uid-20659461-id-1905090.html

三.指向函数的指针
 
在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗?
 
int (*s_calc_func(char op))(int,int);
 
如果不知道,请看下面的程序,里面有比较详细的说明
 
 
<span style="font-size:18px;"> // 定义四个函数int add(int, int);int sub(int, int);int mul(int, int);int div(int, int);// 定义指向这类函数的指针typedef int (*FP_CALC)(int, int); // 我先不介绍,大家能看懂下一行的内容吗?int (*s_calc_func(char op))(int, int); // 下一行的内容与上一行完全相同,// 定义一个函数calc_func,它根据操作字符 op 返回指向相应的计算函数的指针FP_CALC calc_func(char op); // 根据 op 返回相应的计算结果值int calc(int a, int b, char op); int add(int a, int b){    return a + b;}int sub(int a, int b){    return a - b;}int mul(int a, int b){    return a * b;}int div(int a, int b){    return b? a/b : -1;}// 这个函数的用途与下一个函数作业和调用方式的完全相同,// 参数为op,而不是最后的两个整形int (*s_calc_func(char op)) (int, int){    return calc_func(op);} FP_CALC calc_func(char op){    switch (op)    {    case '+': return add;    case '-': return sub;    case '*': return mul;    case '/': return div;    default:        return NULL;    }    return NULL;} int calc(int a, int b, char op){    FP_CALC fp = calc_func(op); // 下面是类似的直接定义指向函数指针变量       // 下面这行是不用typedef,来实现指向函数的指针的例子,麻烦!        int (*s_fp)(int, int) = s_calc_func(op);        // ASSERT(fp == s_fp); // 可以断言这俩是相等的    if (fp) return fp(a, b);    else return -1;} void test_fun(){    int a = 100, b = 20;    printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));    printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));    printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));    printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));} 运行结果   calc(100, 20, +) = 120   calc(100, 20, -) = 80   calc(100, 20, *) = 2000   calc(100, 20, /) = 5</span>


0 0
原创粉丝点击