Почему выводятся адреса, а не значения?
Я думаю там выводится мусор, а не адреса - с чего вы взяли, что там адреса? Они последовательно идут? Я не думаю. *(a-i);//перевести указатель на первый эллемент
Не, тут не произойдет то что вы пишете. Здесь нет операции присвоения или аналогичной ей. Это просто выражение, результат вычисления которого уйдет в никуда. Совершенно непонятно, зачем вы еще и разыменование поставили. Вы вообще понимаете, что написали там?
Вам нужно что-то вроде этого: a = npa; или a -= i;
printf("%d ",*a); /* Вывод указателя? пробуйте разадресацию или взятие адреса */