无法弄清楚指针转换的语法
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
的内容。
我今天在工作时遇到以下功能:
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
的内容。