Обычно используются указатели, когда несколько частей кода должны совместно использовать одно и то же значение, а изменения, сделанные в одной части, отражаются в другой части. Это отличается от того, что значение просто копируется в разные части, что приводит к потере «связи» с исходным значением.
Например, для работы с общим значением вы можете передать указатель на целое значение функции. Эта функция может затем напрямую изменить «первоначально» переданное значение, разыменовав указатель. Напротив, при передаче целочисленного значения «по значению» в функцию, функция будет работать с копией и не будет иметь никаких шансов изменить «исходное» значение напрямую.
Если первый или последний правильный выбор, зависит от того, хотите ли вы использовать общее состояние или вы определенно хотите отделить части кода.