`

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

 
阅读更多

在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

分享到:
评论

相关推荐

    一般函数指针和类的成员函数指针深入解析

    函数指针是通过指向函数的指针间接调用函数。函数指针可以实现对参数类型、参数顺序、返回值都相同的函数...下面是一个指向函数的指针使用的例子。 代码如下:#include <iostream>/*指向函数的指针*/typedef int (*pFun

    C++函数指针和回调函数使用解析

    函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型变、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,用于调用函数、传递参数。 函数指针变量的声明: typedef int ...

    C++中返回指向函数的指针示例

    在C++中,函数的形参可以是指向函数的指针,函数也可以返回函数的指针。例如:int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针...

    c++函数指针和回调函数示例

    只是这个指针它不像普通的指针指向是是一个变量,此时它指向的是一个函数,也就是它存储的是一个函数的地址,如果我们改变它的值,让它所指向的地址由指向funA转变为指向funB,那么这个函数指针的作用就改变了。...

    VC 调用DLL动态库中的函数测试示例.rar

    VC 实验代码,测试调用DLL动态库中的函数,本代码将学习动态链接库程序的编写。静态库与动态库的区别,以及调用程序在链接静态库和动态库时的...用typedef定义指向函数的指针类型,如何获得动态连接库里的函数的指针。

    C++中的函数指针与函数对象的总结

    篇一、函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数。...

    C++指向类成员函数的指针详细解析

    函数指针实例: 代码如下:typedef int (*p)(int,int);//定义一个接受两个int型且返回int型变量的函数指针类型int func(int x,int y){ printf(“func:x=%d,y=%d/n”,x,y); return (x<y?x:y);}int main(){ p fun...

    Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响

    动态链接库程序的编写。静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数,Depends...用typedef定义指向函数的指针类型,如何获得动态连接库里的函数的指针。

    C程序设计(第四版)学习辅导【谭浩强】

    8.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数272 8.6返回指针值的函数276 8.7指针数组和多重指针279 8.7.1什么是指针数组 279 8.7.2指向指针数据的指针282 8.7.3指针数组作main函数的...

    C语言程序设计(谭浩强)第三版

     8.5.3怎样定义和使用指向函数的指针变量  8.5.4用指向函数的指针作函数参数  8.6返回指针值的函数  8.7指针数组和多重指针  8.7.1什么是指针数组  8.7.2指向指针数据的指针  8.7.3指针数组作main函数的形参 ...

    C程序设计语言_第2版(带书签目录)

    5.11 指向函数的指针 5.12 复杂声明 第六章 结构 6.1 结构的基本知识 6.2 结构与函数 6.3 结构数组 6.4 指向结构的指针 6.5 自引用结构 6.6 表查找 6.7 类型定义(typedef) 6.8 联合 6.9 位字段 第七...

    Qt源码剖析-智能指针.pdf

    我们可以把类模板看做成⼀个函数 QSharedPointer为函数名, template中类型列表的为函数形参列表,typedef 为返回值。 T最终 的类型确认待你使⽤时由编译器实例化模板时才能推导出),QSharedPointer类模板分别重...

    C语言讲义.doc

    4.5 通过TYPEDEF定义函数指针 76 5 文件操作 77 5.1 FOPEN 77 5.2 二进制和文本模式的区别 77 5.3 FCLOSE 78 5.4 GETC和PUTC函数 78 5.5 EOF与FEOF函数文件结尾 78 5.6 FPRINTF,FSCANF,FGETS,FPUTS函数 78 5.7 STAT...

    谭浩强C程序设计第三版

    函数指针变量 169 指针型函数 170 指针数组和指向指针的指针 171 指针数组的概念 171 指向指针的指针 174 main函数的参数 176 有关指针的数据类型和指针运算的小结 177 有关指针的数据类型的小结 177 指针运算的小结...

    -C++参考大全(第四版) (2010 年度畅销榜

    5.8 指向函数的指针 5.9 C语言的动态分配函数 5.10 指针应用中的问题 第6章 函数 6.1 函数的一般形式 6.2 数作用域的规则 6.3 函数变元 6.4 传给main()的变元argc和argv 6.5 return语句 6.6 递归 6.7 函数原型 6.8 ...

    C程序设计 第四版 谭浩强 高清扫描版 带完整书签目录 加 学习辅导

    8.5.3 怎样定义和使用指向函数的指针变量 8.5.4 用指向函数的指针作函数参数 8.6 返回指针值的函数 8.7 指针数组和多重指针 8.7.1 什么是指针数组 8.7.2 指向指针数据的指针 8.7.3 指针数组作main函数的形参 8.8 ...

    《VC++深入详解》第19章 动态链接库

    动态链接库程序的编写。静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数,Depends...用typedef定义指向函数的指针类型,如何获得动态连接库里的函数的指针。

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 有关指针的数据类型的小结 6.8.2...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 有关指针的数据类型的小结 6.8.2...

Global site tag (gtag.js) - Google Analytics