Можно ли с помощью shared_ptr объявлять массив int?
Да.std::shared_ptr<int> p(new int[42], std::default_delete<int[]>());
Как обращаться... Разыменовать и обращаться по индексу. Впорос только зачем.
Вы посмотрите как реализован деструктор в shared_ptr
Если он удаляет хранимый обьект через delete[] obj;, то можете использовать,
а вот если delete obj; то нет.
Так что скорее - НЕТ.