我正在查看其他人的代码库,我看到了这个函数原型:
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;
这究竟是怎么合法的?该函数期待一个字符指针和三个整数,但它没有任何东西,这很好.这里发生了什么?
RadioEvents.RxDone = OnRxDone;
这不是调用函数OnRxDone.相反,它将指向函数的指针分配OnRxDone给另一个函数指针RadioEvents.这里函数名称用作指向该函数的指针.稍后可以通过使用RadioEvents.RxDone带有必需参数的函数指针来调用它.
编辑:在问题编辑后,似乎OP询问函数指针的细节.谷歌搜索"c函数指针"返回此问题作为第一个结果:C中的函数指针如何工作?
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |