typedef void (*funcptr)(void)
2015-10-11 11:13
323 查看
这些都是为一些“函数指针”类型定义一个别名,因为函数指针的类型通常十分长,写起来麻烦。 http://zhidao.baidu.com/link?url=E7C4s3srK-QzUqI5OZBSst-fzFKgtGyNaZf2GWEWvW8ruHC8XI1v4RjxsXZ8SvArPewsrPlXjy3F3SkkIB3-Hq 例如第一个,这个函数的原型是void f(CO_Data*);, 经过了typedef void (*post_sync_t)(CO_Data*);后,post_sync_t就是f类型函数的指针的类型别名。 这时你可以这样定义一个变量:post_sync_t p;,p就是一个指向f类型函数的指针。 可以这样给p赋值,p=&f。 如果你不typedef的话,定义p时你就得这样写:void (*p)(CO_Data*);
http://zhidao.baidu.com/question/170422609.html?fr=qrl&index=0&qbl=topic_question_0&word=typedef%20void%20%28%2AFPtr%29%28void%29%3B 定义一个函数指针类型。 比如你有三个函数: void hello(void) { printf("你好!"); } void bye(void) { printf("再见!"); } void ok(void) { printf("好的!"); } typdef void (*funcptr)(void); 这样就构造了一个通用的函数 你用的时候可以这样: void speak(int id) { funcptr words[3] = {&hello, &bye, &ok}; funcptr fun = words[id]; (*fun)(); } 这样的话,如果speak(0)就会显示“你好!” speak(1)就会显示“再见!” speak(2)就会显示“好的!” 用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针。 比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等 eg.
typedef void (*funcptr)();
void hello(void) { printf("你好!\n"); }
void bye(void) { printf("再见!\n"); }
void ok(void) { printf("好的!\n"); }
void speak(int id)
{
funcptr words[3] = {&hello,&bye,&ok};
funcptr fp = words[id];
(*fp)();
}
int main()
{
speak(0);
speak(1);
speak(2);
return 0;
}
热心网友typedef void (*T) (void *);定义了一个指向函数的指针T,其返回值 void 类型,参数也是后面的(void *)接下来我们就可以直接使用 T 来定义这种指针变量,比如:T fn1; //等价于void fn1 (void *);
使用:void func(void *); //声明函数
T fn1; //定义变量
fn1=func; //赋值
(*fn1)(); //执行
相关文章推荐
- UVA 624 CD (01背包+打印路径 或 dfs+记录路径)
- Duang!你一定不知道的百度特效搜索
- Android Fragment的生命周期和返回栈(转)
- C++引用-运行时结构分析
- 《腾讯网UED体验设计之旅》
- 访谈: 从技术开发到核心管理的十年征途
- 异步任务 AsyncTask 进度条的更新
- ajax使用
- JavaScript设计模式--单例模式
- WCSP 2015 南京 空间信息网络相关论文
- 图解Linux命令之--chown命令
- VS2010 测试 -普通单元测试 http://www.cnblogs.com/rhythmK/archive/2012/04/20/2458832.html
- 策略模式
- 九、机器学习系统设计笔记之分类III:音乐体裁分类
- jstl标签的使用
- Android ViewPager多页面滑动切换以及动画效果
- word转化html
- 2015年6月数据库流行度排行榜
- Android应用程序注册广播接收器(registerReceiver)的过程分析
- 一道组合数取模题