我今天在工作时遇到以下功能:
void button_scheduler_event_handler(void *p_event_data, uint16_t event_size)
{
button_handler(*((nrf_drv_gpiote_pin_t*)p_event_data));
}
具有定义如下的按钮处理程序:
void button_handler(nrf_drv_gpiote_pin_t pin)
我不确定Í是否遇到过以下语法:
button_handler(*((nrf_drv_gpiote_pin_t*)p_event_data));
之前,我有些困惑。我首先想到的是,调用button_handler的语法应为:
button_handler(((*nrf_drv_gpiote_pin_t) *p_event_data));
但是我对为什么没有很好的解释。
有人可以解释吗?
编辑:在用户UnholySheep输入后
答案 0 :(得分:1)
p_event_data
参数被声明为void *
,这意味着它可以指向任何内容。但是,基于它调用button_handler
的事实,它表明p_event_data
实际上指向nrf_drv_gpiote_pin_t
。
因此,首先需要将void *
强制转换为nrf_drv_gpiote_pin_t *
:
(nrf_drv_gpiote_pin_t *)p_event_data
然后您需要取消引用该指针:
*((nrf_drv_gpiote_pin_t *)p_event_data)
这就是传递给button_handler
的内容。