处理C中的指针参数

时间:2012-08-19 12:19:20

标签: c pointers function-parameter

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

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);

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

2 个答案:

答案 0 :(得分:4)

在大多数平台上,只需将int填入void *

LED_stop_blink_task((void *)32);

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

  

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

     

任何指针类型都可以转换为整数类型。除了   以前指定的,结果是实现定义。如果   结果不能用整数类型表示,行为是   理解过程科幻定义。结果不必在任何整数的值范围内   类型。

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

  

严格地说,C标准没有定义铸造的结果   int to void *,反之亦然。但是,大多数C编译器允许这些   操作,他们产生了预期的结果;也就是说,int j ==   (int)((void *)j)。

答案 1 :(得分:1)

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