Я думаю, что ваша проблема в том, что %@
имеет смысл только в том случае, если shape->data
действительно указывает на объект Objective-C, поскольку его использование вызывает отправку -description
в obj
.Но если, например, shape->data
указывает на int
, сообщение будет отправлено объекту, который на самом деле не существует.Вместо этого некоторая область памяти может быть интерпретирована как необработанные байты объекта, что приводит к сбою среды выполнения.
Чтобы ответить на ваш вопрос: тип указателя void равен void *
, а тип указателяцель void
.Вы можете напечатать значение указателя с помощью %p
, но я сомневаюсь, что это именно то, что вам нужно.
Так что, если вы уверены, что область памяти, на которую указывает shape->data
, представляет объект Objective-C, иу вас есть доступ к коду класса, вы можете переопределить -description
для печати любой информации, которая вам нравится.