Короче говоря, потому что ++*ptr++
переписывается как ++(*(ptr++))
Правила в ссылке достаточно ясны:
- Постфикс ++ имеет наивысший приоритет =>
++*(ptr++)
- Префикс ++ и * имеют одинаковый приоритет, и они ассоциативны справа =>
++(*(ptr++))
Выражение также можно разбить на отдельные операторы, например:
arr = {9, 99, 999 };
int *ptr = arr;
int *ptr2 = ptr++;//ptr2 still points to the first element
int val = *ptr2; // 9
int incVal= ++val; // 10
Надеюсь, ясно, что ptr
теперь указывает на второй элемент массива, а результатом выражения является увеличенное значение.