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

原创 2003年05月30日 15:46:00

在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗?

 

int (*s_calc_func(char op))(int, int);<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

如果不知道,请看下面的程序,里面有比较详细的说明

 

 

 

// 定义四个函数

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

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

在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果...
  • jianxiong8814
  • jianxiong8814
  • 2007年09月03日 14:53
  • 661

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

#include typedef int (* FP_CALC)(int, int);int add(int a, int b) { return a + b; }  int sub(int a, ...
  • yp513
  • yp513
  • 2008年06月24日 22:39
  • 136

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

在typedef的使用中,最麻烦的是指向函数的指针, 如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int);...
  • safrans
  • safrans
  • 2013年06月12日 23:25
  • 403

指向函数的指针的使用

谈到这个话题,初学者可能在这方面较难看懂。不过对c/c++较熟悉的人来说,大家谈到指向函数的指针就会想到在排序中,那个以函数作为参数传递到排序函数中就是一个最典型的应用。1.指向函数的指针的类型指向函...
  • dremi
  • dremi
  • 2007年10月18日 01:01
  • 6010

多维数组 用typedef简化指针

都为数组转换而成的指针类型应是指向第一个内层数组的指针。 int   ia[3][4]; int   (*ip)[4]  = ia;.      //*ip是int[4]类型,即ip是一个指向含有四个...
  • chenzhen1213
  • chenzhen1213
  • 2014年12月04日 12:15
  • 767

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

在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果...
  • Antoinette
  • Antoinette
  • 2009年05月09日 15:56
  • 430

如何使用指向类的成员函数的指针(详解!)

我们首先复习一下"指向函数的指针"如何使用?   void print()   {   }   void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 vo...
  • lishuhuakai
  • lishuhuakai
  • 2014年01月14日 22:13
  • 27147

typedef 一个二维数组,用这个数组定义指针

翻阅笔记系列。。。typedef int Path[10][10];Path* p;此时的 p 是指针数组还是数组指针呢????我总是记不住。p 是一个指针,指向一个二维数组,所以p是数组指针;使用:...
  • tianjing0805
  • tianjing0805
  • 2017年08月09日 13:22
  • 255

指向函数的指针(一)

之所以想写一篇函数指针的文章,源于函数指针在C/C++编程中使用的广泛性,而对于一些初级编程者来说对函数指针的使用或许有些迷惑,而一旦在适当的时候使用了函数指针,会使代码简洁有力。本篇介绍的是函数指针...
  • hzyong_c
  • hzyong_c
  • 2012年04月16日 00:08
  • 14294

typedef 与 指针连用

typedef struct LNode{  // Singly linked list Node      int    data;       struct LNode   *next;   ...
  • zhanghaotian2011
  • zhanghaotian2011
  • 2012年07月20日 08:31
  • 7104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:typedef使用大全3(指向函数的指针)
举报原因:
原因补充:

(最多只允许输入30个字)