Нет, это не сработает. Когда вы выполняете арифметику c для указателей, это делается в единицах размера типа, на который он указывает. Так что вам не нужно умножать на sizeof(Object)
, это происходит автоматически; если вы сделаете это явно, вы умножитесь дважды.
Object *a0 = a; // points to a[0]
Object *a1 = a0 + 1; // points to a[1]
Object *a2 = a0 + 2; // points to a[2]
Вы умножите только на sizeof
, если сначала приведете указатель к char *
.
Object *a1 = (Object *)((char *)a0 + sizeof(Object));
Object *a2 = (Object *)((char *)a0 + sizeof(Object) * 2);