无法弄清楚指针转换的语法

Trouble figuring out syntax for pointer casting

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

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

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 的内容。