转载:http://blog.csdn.net/kangroger/article/details/20653255
 
在做这道题时:
 32位环境下,int *p=new int[10];请问sizeof(p)的值为()
 A、4              B、10              C、40               D、8
 
我以为正确答案为C,int类型为32位,占四个字节,10个自然就是40了,结果正确答案为A,只是指针p占的空间。
因此写段代码测试一下:
 #include<iostream>
 using namespace std;
 void fun(int P[])//P这里作为指针使用
 {
 cout<<"在函数中"<<sizeof(P)<<endl;
 }
 int main()
 {
 int A[10];
 int* B=new int[10];
 cout<<"数组名"<<sizeof(A)<<endl;
 cout<<"指针"<<sizeof(B)<<endl;
 fun(A);
 }
或者
 #include<iostream>
 using namespace std;
 void fun(int *P)
 {
 cout<<"在函数中"<<sizeof(P)<<endl;
 }
 int main()
 {
 int A[10];
 int* B=new int[10];
 cout<<"数组名"<<sizeof(A)<<endl;
 cout<<"指针"<<sizeof(B)<<endl;
 fun(A);
 }
 
以上结果均输出:
 数组名40
 指针4
 在函数中4
由此可见,数组名并不是完全等同于指针。虽然它们都可以通过指针方式访问数组。
但是数组在作为函数参数传递过程中,会退化成指针。这也是为什么指针作为参数传递时,经常要一个长度。