typedef 函数指针的用法
来源:互联网 发布:hdmi能传输数据么 编辑:程序博客网 时间:2024/06/04 00:20
转自:http://www.cnblogs.com/shenlian/archive/2011/05/21/2053149.html
typedef 函数指针的用法
//#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\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 F (void);//定义函数类型F
之后可以这样声明:
F f,g;相当于声明
int f(void);
int g(void);
下面这个函数声明是错误的:
F h(void);
因为函数可以返回void类型、标量类型、结构体、联合体,但不能返回函数类型,也不能返回数组类型。
而下面这个函数声明是正确的:
F *e(void);
函数e返回一个F *类型的函数指针。
如果给e多套几层括号仍然表示同样的意思:
F *((e))(void);
但如果把*号也套在括号里就不一样了:
int (*fp)(void);
这样声明了一个函数指针,而不是声明一个函数。fp也可以这样声明:
F *fp;
0 0
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef函数指针的用法
- typedef 函数指针的用法
- typedef函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- typedef 函数指针的用法
- 利用Openfire+spark+Smack实现XMPP即时通信
- [并发] -- PHP并发多进程处理利器Gearman
- C++处理json数据——jsoncpp在Visual Studio 2010 的配置与使用(上)
- Yii2.0 增删改查
- sql高级语法入门
- typedef 函数指针的用法
- oracle查看/修改最大连接数和当前连接数/用户等信息
- 线程局部变量__thread关键字
- tomcat server
- swift中让控件浮在上层
- 执行存储过程
- Qt Qml 汽车仪表
- 正则表达式_概要
- table 自适应高度的解决办法