Ответ уже дан. Я могу только повторить это.
Это называется арифметика указателей, , потому что указатели участвуют в арифметической операции. Есть определенные вещи, которые вы можете делать только с указателями.
как вы можете добавить к нему целое число, но вы можете вычесть целое число, только если указатель указывает на некоторый массив в памяти.
также вы не можете вычесть указатели, потому что это может привести к некоторой критической области памяти (для ОС).
Добавление в арифметике указателей является особенным в том смысле, что оно заботится о типе данных элементов массива, поэтому, когда вы говорите
char inBuf[80]
inBuf + 9
он продвигает 9 областей памяти, достаточных для хранения 9 символов (обычно 9 * 1 байт)
int inBuf[80]
inBuf + 9
это добавит 9 ячеек памяти, достаточных для хранения 9 целых чисел (обычно 9 * 4 байта).
Массив и указатели не всегда одинаковы, для этого обратитесь к «программированию на экспертном С»
Также никогда не используйте арифметическую полиморфизацию указателей, для этого обратитесь к «Скотту Мейерсу»