Привет Это проблемы, связанные с GLib, gpointer.glib GHashtable разыменовывает 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 *, как разыменовать их?
Благодаря
Эй, спасибо. Если у меня есть char * p = NULL; p = strdup («один»); Я назвал функцию insert_data (gpointer ptr), такую как insert_data (p); Я могу напечатать указатель как printf («% s \ n», p); или printf ("% s \ n", (char *) p). Он отлично работает и печатает «один». Почему бы не использовать printf ("% s \ n", \ * (char \ *) p) то же самое, что и целочисленный указатель? Не могли бы вы объяснить это немного больше? Благодарю. – user1323328
Это не то же самое. '% s' ожидает' char * '. Поэтому 'printf ("% s \ n ", (char *) p)' отлично работает. Но '% d' ожидает целое число (int конкретно), поэтому вам нужно передать' int'. '* (char *) p)' будет значением первого указателя char на 'p' i.e.' o' в '' one ''. Так что это не сработает. –
Спасибо за ваши комментарии. – user1323328