void (*test)(void);
这就是一个函数指针;
// 函数指针变量名:test
void test_1(void)
{
printf("Hello, World!\n");
}
void test_2(void)
{
printf("good day\n");
}
我这里有两个函数
正常调用就直接void test_1(); void test_2();对吧。
我这里有指针就不一样了
test = test_1;
test();
就是调用void test_1(); 这样是不是看着多次一举。其实不是的因为更多的时候我们写函数指针的时候void (*test[])(void);我们可以定义一个列表作为指针变量名这个时候我们就可以把同一类型的函数放一起了这样就很方便test[0]=test_1,test[1]=test_2;
或者直接这样void (*test[])(void) = {test_1,test_2};
有什么好处呢比如 替换分支语句(少写 if/switch)不用 if(cmd==1) test_1(),直接用下标调用。
补充一个自行理解
// int void (*)(void);
// int a void (*a)(void);
// typedef int intt typedef void (*cb_t)(void);
//intt a 等价于 int a // cb_t a; 等价于 void (*a)(void);
4467

被折叠的 条评论
为什么被折叠?



