You have to use pointers because the array index operator in C++ is only defined for pointers (and user defined classes that overloaded that operator). However the pointer can simply be a temporary:
(&a)[1] = 10;
If you want to avoid pointers then you can simply use std::array
or std::vector
instead:
std::array<int, 10> a;
a[1] = 10;
std::vector<int> v(n);
v[1] = 10;