История изменений
Исправление
cumvillain,
(текущая версия)
:
Ты можешь сделать next = (void*)(((char*)ptr)+1);.
И это, кстати, не делает адресацию линейной :D
Потому что здесь ты используешь тот факт, что арифметика указателей для char *
дает тебе сдвиг на один байт. Лулз в том, что это все ещё арифметика указателей, и ptr может быть хоть структурой с сотней полей, а ptr + 1 может оказаться меньшим физическим адресом. Да, так разумеется никто не делает, но абстракция арифметики указателей это позволяет. Потому что C поддерживает не только линейную память :D
Исправление
cumvillain,
:
Ты можешь сделать next = (void*)(((char*)ptr)+1);.
И это, кстати, не делает адресацию линейной :D
Потому что здесь ты используешь тот факт, что арифметика указателей для char *
дает тебе сдвиг на один байт. Лулз в том, что это все ещё арифметика указателей, и ptr может быть хоть структурой с сотней полей.
Исходная версия
cumvillain,
:
Ты можешь сделать next = (void*)(((char*)ptr)+1);.
И это, кстати, не делает адресацию линейной :D
Потому что здесь ты используешь тот факт, что арифметика указателей на char дает тебе сдвиг на один байт. Лулз в том, что это все ещё арифметика указателей, и ptr может быть хоть структурой с сотней полей.