Указатель - это, по сути, число. Указатель на указатель тоже число. Когда вы используете приведение, вы в основном отбрасываете любую информацию / семантику типов, если переменные размеры совместимы (и каждый указатель, включая указатели на указатели, имеют одинаковый размер).
Предположим, что ваш новый AnyClass
объект выделен в 0x12345678
.
AnyClass *obj2 = new AnyClass(); // obj2 = 0x12345678
Затем вы передаете его адрес gtk_signal_connect (примечание: вы должны использовать g_signal_connect
):
gtk_signal_connect (/* args */, 0x12345678);
Затем вызывается ваш обратный вызов с указанными вами параметрами аргумента:
callback (address_of_widget, address_of_event_structore, 0x12345678); // because you passed 0x12345678 in gtk_signal_connect
Теперь, поскольку 0x12345678
является действительным адресом, вы можете привести его к действительному указателю AnyClass
. data
аргумент может быть определен как gpointer************
, это не имеет значения, потому что, когда вы преобразуете его в AnyClass*
, вы все равно выбрасываете информацию оригинального типа.