Арифметика указателей недопустима для void*
, поскольку void
является неполным типом объекта.
Из проекта комитета C N1570:
6.5.6 Аддитивные операторы
...
2. Кроме того, либо оба операнда должны иметь арифметический тип, либо один операнд должен быть указателем на полный тип объекта , а другой должен иметь целочисленный тип.
Но это разрешено для void**
, потому что void*
НЕ является неполным типом объекта. Это как указатель на тип символа.
6.2.5 Типы
...
19. Тип void содержит пустой набор значений; это неполный тип объекта , который не может быть завершен.
...
28. Указатель на void должен иметь те же требования к представлению и выравниванию , что и
указатель на тип символа .