gpt4 book ai didi

c - 指向函数的指针 - 一种不同的声明方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:08 25 4
gpt4 key购买 nike

阅读时this (精神病患者给出的答案),我明白了如何typedef和调用函数指针。但是在考虑了 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);
}

我不明白使用函数指针语法和这种方法有什么区别?两者似乎产生几乎相同的功能。

最佳答案

风格

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 后面是个坏主意。函数指针也不异常(exception)。

关于c - 指向函数的指针 - 一种不同的声明方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36564473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com