嗨这个问题与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 *指针,如何取消引用它们?
由于
答案 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);
...
}