处理C中的指针参数

我正在使用一个具有以下签名function的库:

void LED_stop_blink_task ( void * callback_parameter ); 

void指针所代表的实际参数是指向uint32_t的指针,uint32_t是电路板上led的编号。

有没有办法调用此函数而不使用变量来保存数据? 在我的想象中,它会像

 LED_stop_blink_task(&35); 

或唯一的方法是这样的:

 uint32_t led_num = 35; LED_stop_blink_task(&led_num); 

如果你问我为什么要抛弃变量,那么,我只是好奇它是否可能……

在大多数平台上,可以简单地将int void *

 LED_stop_blink_task((void *)32); 

然后在函数中你可以转换为int

整数可以转换为任何指针类型。 除了之前指定的,结果是实现定义,可能未正确对齐,可能不指向引用类型的实体,并且可能是陷阱表示。

任何指针类型都可以转换为整数类型。 除了之前指定的,结果是实现定义。 如果结果无法以整数类型表示,则行为未定义。 结果不必在任何整数类型的值范围内。

在实践中,这将适用于任何支持POSIX的平台。 例如,TL​​PI说:

严格地说,C标准没有定义将int转换为void *的结果,反之亦然。 但是,大多数C编译器允许这些操作,并且它们产生期望的结果; 也就是说,int j ==(int)((void *)j)。

Cnicutar的答案几乎是完美的; 让我扩展它,它不是真正的可移植 – int不保证与指针大小(或更小)相同,所以你应该使用intptr_tuintptr_t代替。