这到底是什么意思?这是如何允许和合法的? 我发誓,每当我想到我掌握了这种语言的运作方式时,就会出现一些真实可爱的语法。
这是来自Semtech的其中一个无线电的示例项目。
从 radio.h :
void ( *SetRxConfig )( RadioModems_t modem, uint32_t bandwidth,
uint32_t datarate, uint8_t coderate,
uint32_t bandwidthAfc, uint16_t preambleLen,
uint16_t symbTimeout, bool fixLen,
uint8_t payloadLen,
bool crcOn, bool FreqHopOn, uint8_t HopPeriod,
bool iqInverted, bool rxContinuous );
如果在天堂有正义,怎么写这样的东西呢?这段代码做了什么以及它叫什么,所以我可以查看更多关于它的内容?
答案 0 :(得分:3)
这声明了一个函数:
int foo(int, float, double);
这定义(或声明 - 取决于上下文)一个函数指针,可以赋予函数
foo
的地址:
int (*function_pointer)(int, float, double);
这就是你在这里看到的。
在an answer to a similar question建议的user2357112中可以找到关于如何使用,传递参数和返回函数指针的其他示例的更详细说明。
可能的用途包括:
void * (*mymegalib_malloc)(size_t size)
,您可以在其中替换自己的分配器),或者为signal
中的函数指针提供setter函数,qsort
中传递一个数组,元素的数量和一个函数,它比较了该数组的两个索引 - 让你有机会让{ {1}}对您想要的任何数据结构进行操作,创建一些跳转表,如下所示:
qsort