Во-первых, наличие как typeX
, так и TypeX
, но с очень разными значениями, очень запутанно.Также не скрывайте указатели за typedefs.
Что касается вашего вопроса: Нет, вы не можете восстановить размер объекта, на который указывает t
.
sizeof EXPR
дает вамразмер типа EXPR (в байтах).Не имеет значения, что является фактическим значением (на самом деле EXPR даже не оценивается 1 ).
Рассмотрим
char c;
int i;
double d[100];
TypeX p1 = (TypeX)&c, p2 = (TypeX)&i, p3 = (TypeX)d;
Все из p1
,p2
, p3
имеют одинаковый тип, поэтому sizeof
вернет одинаковое значение для всех них, даже если объекты, на которые они указывают, имеют очень разные размеры.
Наконец, sizeof (void)
не является стандартом C. GCC допускает его как расширение (и возвращает 1
), но предупредит вас, что это нестандартно, если вы включите диагностику -pedantic
.
1 - С одним относительно неясным исключением, которое я просто проигнорирую.