0

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

void LED_stop_blink_task ( void * callback_parameter );

void指针所代表的实际参数是一个指向uint32_t的指针,也就是板上led的编号。

有没有办法在不使用变量来保存数据的情况下调用这个函数?在我的想象中它会像

LED_stop_blink_task(&35);

或者唯一的方法是这样的:

uint32_t led_num = 35;
LED_stop_blink_task(&led_num);

如果你问我为什么要把变量扔掉,好吧,我只是好奇这是否可能......

4

2 回答 2

4

在大多数平台上,可以简单地将 a 填充intvoid *

LED_stop_blink_task((void *)32);

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

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

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

实际上,这将适用于任何 POSIX 支持的平台。例如 TLPI 说:

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

于 2012-08-19T12:21:25.037 回答
1

Cnicutar's answer is almost perfect; let me extend it with that it's not really portable - int is not guaranteed to be of the same size (or smaller) than a pointer, so you should use intptr_t or uintptr_t instead.

于 2012-08-19T12:29:36.663 回答