glib GHashtable 取消引用 gpointer

glib GHashtable dereference gpointer

您好,这个问题与 GLib、gpointer 有关。

我创建了一个 gpointer 类型的值。

    gpointer        keys;

我调用了一个函数

insert_data(gpointer key);

我就这样将整数指针传递给了这个函数。

int* p = malloc(sizeof(int));
*p = 1;
// gpointer is void* pointer, I cast it to integer type pointer here.
insert_data(p);

我想在函数内部查看 p 的值。

printf("%d\n", (int*)p);

它输出一些非常大的number.From我这边是296304,不是实际值1。 我想知道如何取消引用像 gpointer 这样的指针。

对于整数 32 位指针,char* 指针,如何解引用它们?

谢谢

您正在尝试打印指针本身。从技术上讲,这是 undefined behaviour 因为您使用错误的格式说明符来打印指针。您观察到的是指针 p.

的整数解释

改变

printf("%d\n", (int*)p);

printf("%d\n", *(int*)p);

或者你可以这样做:

insert_data(gpointer ptr)
{
  int *p = ptr;
  printf("%d\n", *p);
  ...
}