glib GHashtable dereference gpointer

时间:2015-07-24 20:39:26

标签: c pointers glib dereference

嗨这个问题与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);

输出一些非常大的数字。从我这边来看它是296304,没有实际值1。 我想知道如何取消引用像gpointer这样的指针。

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

由于

1 个答案:

答案 0 :(得分:1)

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

更改

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

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

或者你可以这样做:

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