不是将实际指针发送到一个值,而是将该值强制转换为一个指针。我在 GTK 程序的 GUI 界面代码中找到了这些示例。
g_signal_connect (pastebutton[pane],
"clicked",
G_CALLBACK(on_paste_button_pressed),
(void*)((long)pane<<4));
在上面的例子中,我指的是g_signal_connect
. 当on_paste_button_pressed
被 GTK2 调用时,on_paste_button_pressed
将user_data
void 指针转换回来,如下所示:
int pane = ((long)user_data) >> 4;
实际上,我在代码中添加了这个特定的示例,但我基于已经存在的内容。我添加了位移以避免有关投射的警告。该程序本身有四个窗格,其中包含相当多的小部件,复制和粘贴按钮允许您将所有值从一个窗格复制到另一个窗格。
这种将值转换为指针地址的方法是否经常使用,是否有不应该使用的原因?
编辑:
从整数到空指针的转换也可以像这样实现:
void* void_ptr = some_int - NULL;