-1

当我遇到以下功能时,我今天正在工作:

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 输入后

4

1 回答 1

1

p_event_data参数被声明为 a void *,这意味着它可以指向任何东西。但是,基于它调用的事实button_handler,它表明p_event_data实际指向一个nrf_drv_gpiote_pin_t.

因此,首先您需要将其void *转换为 a nrf_drv_gpiote_pin_t *

(nrf_drv_gpiote_pin_t  *)p_event_data

然后你需要取消引用该指针:

*((nrf_drv_gpiote_pin_t  *)p_event_data)

这就是传递给button_handler.

于 2018-09-03T14:10:44.617 回答