洗衣房用水量:typedef和指向函数的指针(好文)(1读)

来源:百度文库 编辑:偶看新闻 时间:2024/05/08 07:00:00

typedef和指向函数的指针(好文)(1读)

2007-04-20 16:44 571人阅读 评论(1) 收藏 举报     在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果不知道,请看下面的程序,里面有比较详细的说明   // 定义四个函数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
作者Blog:http://blog.csdn.net/eion/相关文章如何获取本机所有MAC地址 读者——写者问题 Makefile编写小说(一) typedef使用大全3(指向函数的指针) typedef 使用大全2(结构体)