在阅读this(精神病学给出的答案)时,我理解了如何键入def并调用函数指针。但是在考虑了typedef之后,我尝试了一点,并且能够以这种方式调用函数:
typedef void func(unsigned char);
void test(unsigned char a);
int main()
{
unsigned char b=0U;
func *fp=&test;
while(1)
{
fp(b);
b++;
}
}
void test(unsigned char a)
{
printf("%d",a);
}
我不明白使用函数指针语法和这种方法有什么区别?两者似乎几乎产生相同的功能。
答案 0 :(得分:5)
风格
typedef void func_t (void);
...
funct_t* fp;
是声明函数指针的最明智的方法之一。清除,因为它与C的其余指针语法一致。
相当于稍微不那么可读
typedef void (*func_t)(void);
func_t fp;
反过来相当于更不易读的
void (*fp)(void);
当您将这些作为参数传递给函数时,第一种样式的优势变得显而易见:
1) void sort (func_t* callback); // very clear and readable!
2) void sort (func_t callback); // hmm what is this? passing by value?
3) void sort (void(*callback)(void)); // unreadable mess
通常,将指针语法隐藏在typedef后面是一个坏主意。函数指针也不例外。
答案 1 :(得分:3)
您正在使用声明创建一个函数指针,即
func *fp = &test; // fp is a function pointer!
另一种方法是输入指针,
typedef void (*func)(unsigned char);
func fp = &test; // Notice, no '*' in the declaration?
答案 2 :(得分:1)
如果func
被typedef
编辑为函数指针,那么语句
func *fp=&test;
将是
func fp=&test;