Работа с аргументом указателя в C

Я использую библиотеку, которая имеет функцию со следующей подписью:

void LED_stop_blink_task ( void * callback_parameter ); 

Фактическим параметром, обозначаемым указателем void, является указатель на uint32_t, который является числом светодиодов на плате.

Есть ли способ вызвать эту функцию, не используя переменную для хранения данных? В моем воображении это будет похоже на

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

Ответ Куникура почти идеален; позвольте мне расширить его тем, что он не очень портативен – int не гарантированно будет иметь тот же размер (или меньше), чем указатель, поэтому вместо этого вы должны использовать intptr_t или uintptr_t .