сложения и вычитания с указателями работают с размером заостренного типа:
int* foo = 0x1000;
foo++;
// foo is now 0x1004 because sizeof(int) is 4
Семантически говоря, размер void
должен быть равен нулю, поскольку он ничего не представляет. По этой причине арифметика указателей на указателях void
должна быть недопустимой.
Однако по нескольким причинам sizeof(void)
возвращает 1, и арифметика работает так, как если бы это был указатель char
. Поскольку это семантически неверно, вы получите предупреждение.
Для подавления предупреждения используйте char
указатели.