Вместо того, чтобы отправлять фактический указатель на значение, значение приводится к указателю. Я нашел эти примеры в коде графического интерфейса программы GTK.
g_signal_connect (pastebutton[pane],
"clicked",
G_CALLBACK(on_paste_button_pressed),
(void*)((long)pane<<4));
В приведенном выше примере я имею в виду последний параметр g_signal_connect
. Когда GTK2 вызывает on_paste_button_pressed
, on_paste_button_pressed
возвращает указатель void user_data
следующим образом:
int pane = ((long)user_data) >> 4;
На самом деле, я добавил этот конкретный пример в код, но я основал его на том, что уже было там. Я добавил сдвиг битов, чтобы избежать предупреждений о кастинге. Сама программа имеет четыре панели, содержащие большое количество виджетов, кнопки копирования и вставки позволяют копировать все значения из одной панели в другую.
Часто ли используется этот способ приведения значения к адресу указателя, и есть ли причины, по которым его не следует использовать?
редактирование:
Приведение от целого числа к пустому указателю также может быть достигнуто так:
void* void_ptr = some_int - NULL;