typedef void (*funcptr)(void)
这些都是为一些“函数指针”类型定义一个别名,因为函数指针的类型通常十分长,写起来麻烦。
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)(); //执行
使用:void func(void *); //声明函数
T fn1; //定义变量
fn1=func; //赋值
(*fn1)(); //执行
@2021-12-22 11:18:06

分类:
C
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!