Указатель или Индекс элемента?
Потому что работа с указателями более гибкая, чем использование индексов массива. Указатели - это одна из фишек языка С, если ее не понимать - будет очень сложно на нем писать.
имею ввиду, зачем делают так *p+1 для доступа к следующиму элементу, а не p[1]? 
Вообще то ничего общего между приведенными операциями нет (смотрите приоритет операций):
*p+1 == (*p) + 1
p[1] == *(p+1)

Но вопрос в целом понятен, не взирая на ошибку в примере.
Надо смотреть на контекст. Часто бывает, что код не ограничивается одноразовым применением p[1], а например есть целая серия обращений к p[1], в этом случае будет экономия на операциях, если вы сначала вычислите адрес p[1], а в дальнейшем будете использовать простое разыменование этого адреса. Будет ли реально выигрыш во времени исполнения зависит от компилятора, в целом думаю, современные компиляторы в состоянии сами сделать подобную оптимизацию.