• typedef 函数指针的使用(含例子)


    C代码  
    //#include<iostream.h>  
    #include<stdio.h>  
      
    typedef int (*FP_CALC)(int, int);  
    //注意这里不是函数声明而是函数定义,它是一个地址,你可以直接输出add看看  
    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参数、  
    //返回类型为int 的函数指针。它的作用是根据操作符返回相应函数的地址  
    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;  
    }  
    //s_calc_func为函数,它的参数是 op,  
    //返回值为一个拥有 两个int参数、返回类型为int 的函数指针  
    int (*s_calc_func(char op)) (int, int)  
    {  
         return calc_func(op);  
    }   
    //最终用户直接调用的函数,该函数接收两个int整数,和一个算术运算符,返回两数的运算结果  
    int calc(int a, int b, char op)  
    {  
         FP_CALC fp = calc_func(op); //根据预算符得到各种运算的函数的地址  
             int (*s_fp)(int, int) = s_calc_func(op);//用于测试  
             // ASSERT(fp == s_fp);   // 可以断言这俩是相等的  
         if (fp) return fp(a, b);//根据上一步得到的函数的地址调用相应函数,并返回结果  
         else return -1;  
    }  
      
    void main()  
    {     
        int a = 100, b = 20;  
      
         printf("calc(%d, %d, %c) = %d
    ", a, b, '+', calc(a, b, '+'));  
         printf("calc(%d, %d, %c) = %d
    ", a, b, '-', calc(a, b, '-'));  
         printf("calc(%d, %d, %c) = %d
    ", a, b, '*', calc(a, b, '*'));  
         printf("calc(%d, %d, %c) = %d
    ", a, b, '/', calc(a, b, '/'));  
    }  
    
    ---------------------
    
    本文来自 蜗牛凯 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/arvin_kai/article/details/39555529?utm_source=copy 
  • 相关阅读:
    open jdk卸载
    “玲珑杯”ACM比赛 Round #18---图论你先敲完模板(DP+思维)
    “玲珑杯”ACM比赛 Round #18--最后你还是AK了(搜索+思维)
    hdu 5116--Everlasting L(计数DP)
    HDU 5113--Black And White(搜索+剪枝)
    hdu 5573---Binary Tree(构造)
    HDU 5517---Triple(二维树状数组)
    hdu 5975---Aninteresting game(树状数组)
    hdu 5972---Regular Number(字符串匹配)
    HDU 4570---Multi-bit Trie(区间DP)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007438.html
Copyright © 2020-2023  润新知