在读这个(精神病学给出的答案)时,我理解了如何输入type并调用函数指针.但是在考虑了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);
}
Run Code Online (Sandbox Code Playgroud)
我不明白使用函数指针语法和这种方法有什么区别?两者似乎几乎产生相同的功能.
风格
typedef void func_t (void);
...
funct_t* fp;
Run Code Online (Sandbox Code Playgroud)
是声明函数指针的最清晰的方法之一.清除因为它与C的其余指针语法一致.
它相当于略低的可读性
typedef void (*func_t)(void);
func_t fp;
Run Code Online (Sandbox Code Playgroud)
反过来相当于可读性差得多
void (*fp)(void);
Run Code Online (Sandbox Code Playgroud)
当您将这些作为参数传递给函数时,第一种样式的优势变得显而易见:
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
Run Code Online (Sandbox Code Playgroud)
通常,将指针语法隐藏在typedef后面是一个坏主意.函数指针也不例外.