printf("Struct2: {value: %d | type: %d}\n", *((int *) val3.value), val3.type);
Это должно сделать работу.
A void *
содержит адрес любого типа.Вы сохранили &number
в нем.Теперь, если вы хотите распечатать его, прежде всего вам нужно получить доступ к этому адресу.Вы не можете получить доступ к адресу, который хранится в void *
без ввода типа.Это потому, что компилятор не поймет, сколько байтов по этому адресу необходимо получить.void *
просто указывает на начало этого адреса.
Итак, чтобы сообщить компилятору, что нам нужно получить доступ к sizeof(int)
байтам, мы сначала приведем его к типу (int *)
, а затем, чтобы получить значение по этому адресу, мы сделаем *((int *) val3.value)
.
Здесь вы можете прочитать больше о void *
:
Что означает void * и как его использовать?