If, for example, you had a vector of int:
std::vector<int> vec(10);
and then did something like
int other = vec[0];
other = 5;
I think most people would understand that the assignment other = 5; would change the value of the variable other only, not the value of vec[0].
Now lets take your code:
myclass* other = top[0];
other = new myclass();
It's exactly the same thing here: The assignment other = new myclass(); only changes the variable other and where it points, it doesn't change top[0].
What I think you want is to use other as a reference to the value in top[0], which you can do by using references:
myclass*& other = top[0];
other = new myclass();
Now other will be a reference to the value in top[0], so the assignment will change top[0].
And for completeness sake, and keeping with the pointer-to-pointer thing in the title, you could of course solve it through pointers to pointers:
myclass** other = &top[0];
*other = new myclass();
With the above other will be a pointer to top[0], and you need to use the dereference operator * (as in *other) in the assignment to change the value at top[0]. I really recommend the references though.
top[0] = new myclass?