我正在使用一个具有以下签名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的平台。 例如,TLPI说:
严格地说,C标准没有定义将int转换为void *的结果,反之亦然。 但是,大多数C编译器允许这些操作,并且它们产生期望的结果; 也就是说,int j ==(int)((void *)j)。
Cnicutar的答案几乎是完美的; 让我扩展它,它不是真正的可移植 – int不保证与指针大小(或更小)相同,所以你应该使用intptr_t
或uintptr_t
代替。
以上就是c/c++开发分享处理C中的指针参数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522803.html