gpt4 book ai didi

c - 处理 C 中的指针参数

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:58 25 4
gpt4 key购买 nike

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

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

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

最佳答案

在大多数平台上,可以简单地将 int 填充到 void * 中:

LED_stop_blink_task((void *)32);

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

An integer may be converted to any pointer type. Except as previously specified, the result is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation.

Any pointer type may be converted to an integer type. Except as previously specified, the result is implementation-defined. If the result cannot be represented in the integer type, the behavior is undefined. The result need not be in the range of values of any integer type.

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

Strictly speaking, the C standards don’t define the results of casting int to void * and vice versa. However, most C compilers permit these operations, and they produce the desired result; that is, int j == (int) ((void *) j).

关于c - 处理 C 中的指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12026427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com