Стандарт C не допускает арифметику указателей пустоты. Однако GNU C допускается, учитывая размер void 1
.
C11 standard §6.2.5
Параграф - 19
Тип
blockquote>void
содержит пустой набор значений; это неполный тип объекта, который не может быть завершен.Следующая программа отлично работает в компиляторе GCC.
#include<stdio.h> int main() { int arr[2] = {1, 2}; void *ptr = &arr; ptr = ptr + sizeof(int); printf("%d\n", *(int *)ptr); return 0; }
Возможно, другие компиляторы генерируют ошибку.