如何将这个结构元素评估为没有parantheses的函数?

tes*_*123 1 c function

我正在查看其他人的代码库,我看到了这个函数原型:

void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
Run Code Online (Sandbox Code Playgroud)

它的定义如下:

void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
{
    Radio.Sleep( );
    BufferSize = size;
    memcpy( Buffer, payload, BufferSize );
    RssiValue = rssi;
    SnrValue = snr;
    State = RX;
}
Run Code Online (Sandbox Code Playgroud)

但是,稍后在超循环中调用它,main如下所示:

RadioEvents.RxDone = OnRxDone;

这究竟是怎么合法的?该函数期待一个字符指针和三个整数,但它没有任何东西,这很好.这里发生了什么?

tas*_*oor 7

RadioEvents.RxDone = OnRxDone;

这不是调用函数OnRxDone.相反,它将指向函数的指针分配OnRxDone给另一个函数指针RadioEvents.这里函数名称用作指向该函数的指针.稍后可以通过使用RadioEvents.RxDone带有必需参数的函数指针来调用它.

编辑:在问题编辑后,似乎OP询问函数指针的细节.谷歌搜索"c函数指针"返回此问题作为第一个结果:C中的函数指针如何工作?