关于动态内存分配,在闲置储存区中究竟怎么储存的

#include<iostream>
using namespace std;
int main(){
    int *p=new int(14);// 赋初值 
    int **pp=new int *(p);
    cout<<p<<'\n'<<*pp<<'\n'<<'\n';
    cout<<&p<<'\n'<<pp<<'\n';
}

运行结果:
地址1
地址1

地址2
地址3
//地址太长了就不写了,反正就是这样我的理解应该地址3与地址2相等才对,但是现在不相等,好奇怪哦