typedef函数指针用法

转载 2017年01月03日 10:22:54

1.简单的函数指针的应用

形式1:返回类型(*函数名)(参数表) 

[cpp] view plain copy
  1. char (*pFun)(int);   
  2. char glFun(int a){ return;}   
  3. void main()   
  4. {   
  5.     pFun = glFun;   
  6.     (*pFun)(2);   
  7. }  


         第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
         第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址
         然后就是main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。

2.使用typedef更直观更方便

形式1:typedef  返回类型(*新类型)(参数表)

[cpp] view plain copy
  1. typedef char (*PTRFUN)(int);   
  2. PTRFUN pFun;   
  3. char glFun(int a){ return;}   
  4. void main()   
  5. {   
  6.     pFun = glFun;   
  7.     (*pFun)(2);   
  8. }   

            typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。
           第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。

3.例子说明

[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <assert.h>  
  3.   
  4. typedef int (*FP_CALC)(int,int);//定义一个函数指针类型  
  5.   
  6. int add(int a, int b)  
  7. {  
  8.     return a + b;  
  9. }  
  10.   
  11. int sub(int a, int b)  
  12. {  
  13.     return a - b;  
  14. }  
  15.   
  16. int mul(int a, int b)  
  17. {  
  18.     return a * b;  
  19. }  
  20.   
  21. int div(int a, int b)  
  22. {  
  23.     return b ? a/b : -1;  
  24. }  
  25.   
  26. //定义一个函数,参数为op,返回一个指针,该指针类型为拥有两个int参数、  
  27. //返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址  
  28. FP_CALC calc_func(char op)  
  29. {  
  30.     switch( op )  
  31.     {  
  32.     case '+':  
  33.         return add;  
  34.     case '-':  
  35.         return sub;  
  36.     case '*':  
  37.         return mul;  
  38.     case '/':  
  39.         return div;  
  40.     default:  
  41.         return NULL;  
  42.     }  
  43.     return NULL;  
  44. }  
  45.   
  46. //s_calc_func为函数,它的参数是 op,     
  47. //返回值为一个拥有两个int参数、返回类型为int的函数指针    
  48. int (*s_calc_func(char op)) (int , int)  
  49. {  
  50.     return calc_func(op);  
  51. }  
  52.   
  53. //最终用户直接调用的函数,该函数接收两个int整数,  
  54. //和一个算术运算符,返回两数的运算结果  
  55. int calc(int a, int b, char op)  
  56. {  
  57.     FP_CALC fp = calc_func(op);  
  58.     int (*s_fp)(int,int) = s_calc_func(op);//用于测试  
  59.   
  60.     assert(fp == s_fp);// 可以断言这两个是相等的  
  61.   
  62.     if(fp)  
  63.         return fp(a,b);  
  64.     else  
  65.         return -1;  
  66. }  
  67.   
  68. void main()  
  69. {  
  70.     int a = 100, b = 20;  
  71.   
  72.     printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));  
  73.     printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));     
  74.     printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));     
  75.     printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));   
  76. 转自  http://blog.csdn.net/qll125596718/article/details/6891881 

c++ typedef 函数指针详细说明

引用自两篇blog原帖1地址 http://www.enjoykorea.net/html/25/25-26214.html原帖2地址 http://blog.csdn.net/sharpdew/ar...
  • future200x
  • future200x
  • 2010年03月05日 17:26
  • 4853

“指针函数”与“函数指针” typedef 定义函数指针

一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型...
  • lishenglong666
  • lishenglong666
  • 2011年12月19日 14:41
  • 1187

const/typedef/函数指针/回调函数

变量:       左值:(lvalue),左值可以出现在赋值语句的左边或右边       右值:(rvalue),右值只能出现在赋值的右边,不能出现在赋值语句的左边。 变量是左值,...
  • lostinai
  • lostinai
  • 2015年04月17日 12:59
  • 813

C++------------typedef 函数指针类型定义

摘要bycrazyhacking:        typedef 是定义了一种“函数指针”类型,可以再声明很多变量。函数指针的定义是定义了一个变量。 int max(int x,int y){...
  • crazyhacking
  • crazyhacking
  • 2013年12月27日 11:28
  • 1574

C语言:typedef定义函数指针

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

cpp: 使用typedef定义函数指针

Java在对于oop的封装上面抽象程度非常的高;但是对于函数,java里面的函数或者方法,可以说是非常基础或者低级。纵观java的语言特性,没有对函数有更高程度的封装。 但是,除了在oop方面的抽象...
  • DucklikeJAVA
  • DucklikeJAVA
  • 2017年12月10日 21:35
  • 297

typedef函数指针与函数类型的定义及使用方式

1、先给出一道面试题: #include "stdafx.h" #include "stdio.h" //实现数值的自增1 int inc(int a) { return(++a); } //实现数...
  • a904235765
  • a904235765
  • 2015年08月10日 21:17
  • 2275

typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

上面介绍得是我们常用的比较简单的typedef的用法,下面首先介绍一下函数指针。//定义一个指针变量p,根据形式1函数指针的形式 //我们可以知道他是指向一个参数为Int,返回类型为 //char的函...
  • u014221279
  • u014221279
  • 2016年03月25日 16:06
  • 5024

c++ typedef 函数指针详细说明(包含类函数指针)

http://blog.csdn.net/future200x/article/details/5350134
  • lwljava
  • lwljava
  • 2014年07月18日 22:47
  • 1390

C语言结构体及typedef关键字定义结构体别名和函数指针的应用

结构体(struct)的初始化 struct autonlist { char *symbol; struct nlist nl[...
  • txl16211
  • txl16211
  • 2014年11月16日 19:43
  • 2562
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:typedef函数指针用法
举报原因:
原因补充:

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