您的位置:首页 > 其它

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)(); //执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: