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);
...
}
您好,这个问题与 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);
...
}