Это может быть сложным вопросом. Вы действительно не хотите делать арифметику указателей в своих структурах. Причина: Struct Alignment . Что происходит, если у вас есть такая структура:
struct a{
char x; //address 0x8
//potentially 3 bytes lost here:
int y; //address 0x12
}
у не собирается начинать один байт после х. Чтобы сохранить выравнивание, поэтому y начинает, скажем, с адреса, кратного 4, после x будет добавлено несколько байтов заполнения.
Если у вас есть адрес экземпляра структуры 0x08 и вы добавили размер символа, и, получив (0x09), вы не получите начало y 0x12, вы получите некоторые данные мусора, которые являются частью мусора и частью y.
В этом случае вы должны быть в порядке, так как одни и те же типы располагаются сразу друг за другом, и вы можете сделать что-то вроде этого:
freeblock* p = s.prev;
p += sizeof(p);
freeblock next = *p;
Вы действительно хотите получить указатель на структуру и позволить компилятору вычислить смещения для вас.