弄清楚指针转换的语法

时间:2018-09-03 13:28:05

标签: c nrf52

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

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

1 个答案:

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