Во-первых, оператор ++ имеет приоритет над оператором *, а операторы () имеют приоритет над всем остальным.
Во-вторых, оператор числа ++ такой же, как оператор числа ++, если вы никому их не назначаете. Разница в том, что число ++ возвращает число, а затем увеличивает число, а число ++ сначала увеличивает, а затем возвращает его.
В-третьих, увеличивая значение указателя, вы увеличиваете его на размер его содержимого, то есть увеличиваете его, как если бы вы итерировали в массиве.
Итак, подведем итог:
ptr++; // Pointer moves to the next int position (as if it was an array)
++ptr; // Pointer moves to the next int position (as if it was an array)
++*ptr; // The value of ptr is incremented
++(*ptr); // The value of ptr is incremented
++*(ptr); // The value of ptr is incremented
*ptr++; // Pointer moves to the next int position (as if it was an array). But returns the old content
(*ptr)++; // The value of ptr is incremented
*(ptr)++; // Pointer moves to the next int position (as if it was an array). But returns the old content
*++ptr; // Pointer moves to the next int position, and then get's accessed, with your code, segfault
*(++ptr); // Pointer moves to the next int position, and then get's accessed, with your code, segfault
Поскольку здесь много случаев, возможно, я допустил какую-то ошибку, пожалуйста, исправьте меня, если я ошибаюсь.
EDIT:
Так что я был неправ, приоритет немного сложнее, чем то, что я написал, посмотрите здесь:
http://en.cppreference.com/w/cpp/language/operator_precedence