用sizeof()求数组长度有关问题

用sizeof()求数组长度问题?
求大神解释一下代码用sizeof()求数组长度有关问题


代码:
int array[10];
int* p=new int[10];

cout<<sizeof(array)/sizeof(int)<<endl;
cout<<sizeof(p)/sizeof(int)<<endl;

输出是:
10
1

为什么呢,难道与p所指向的内存在堆上分配有关?
------解决方案--------------------
sizeof获取的是数据类型的大小
int array[10];这里的array是一个有10个int的数组,所以大小是int大小乘以10
int* p=new int[10];这里的p是一个指向内存中某个位置的int指针,指针的大小是固定的,无论你申请了多大的内存或者你根本没有申请内存,都跟指针没有关系
------解决方案--------------------
sizeof,对象占用内存的大小,p是一个指针,大小是4字节
------解决方案--------------------
32位下
cout<<sizeof(array)/sizeof(int)<<endl;
sizeof(array)=4*10=40;sizeof(Int)=4;

cout<<sizeof(p)/sizeof(int)<<endl;
sizeof(p)=4;
sizeof(int)=4;
------解决方案--------------------
数组和指针不是一回事!!!
估计又是个谭浩强的受害者。
------解决方案--------------------
array是int [10]类型的
而p是int (*) [10]类型的