针对链接栈中元素出栈的问题

// 6.实现出栈
template<typename T>
bool LinkStack<T>::Pop(T&x)
{
    LinkNode<T> *p;
    if (IsEmpty())// 栈空的时候不能让元素出栈
    {
        return false;
    }
    else
    {
        x = top->data;
        p = top;
        top = top->next;// 指向原来栈顶的下面的元素
        delete p;       // 将原来的栈顶删除
        //p = NULL;
        size--;
        return true;
    }
}

上面是链接栈中元素出栈的代码,为什么top=top->next之后p还指向的是原来的top呢?刚开始p=top,这不就说明开始的时候top和p指向的是同一块内存空间吗?

top指针如何变化跟p指针没关系,只有p指向的内存空间发生变化,p才会跟着改变,即使用delete语句删除了指针p,也只是删除了p所指向的内存空间的内容,该内存空间即地址依旧存在,只不过里面的内容没有了,此时里面的内容为乱码