Ваш комментарий к ответу nos подтвердил мое подозрение: это арифметика указателя.Когда вы увеличиваете указатель int
с помощью ++
, он не просто добавляет единицу к числу, но на самом деле увеличивается на размер целого числа, которое обычно составляет 4 (байта).Так что i++
фактически добавляет 4 к числовому значению i
.
Точно так же, если вы используете +=
для указателя, например i += 5
, он не просто добавит 5 (или что-то еще) к числовому значению i
, оно будет увеличиваться на i
на размер этого целого числа, поэтому в этом случае 5 * 4 = 20 байт.
Причина этого заключается в том, что если выу вас есть часть памяти, которую вы рассматриваете как массив,
int array[100]; // for example
вы можете перебирать элементы массива, увеличивая указатель.
int* i = array;
int* end = array + 100;
for (i = array; i < end; i++) { /* do whatever */ }
и вы выиграли 'вам придется переписать цикл, если вы используете тип данных другого размера.