在作这道题时:ios
32位环境下,int *p=new int[10];请问sizeof(p)的值为()
A、4 B、10 C、40 D、8数组
我觉得正确答案为C,int类型为32位,占四个字节,10个天然就是40了,结果正确答案为A,只是指针p占的空间。函数
所以写段代码测试一下:测试
1 #include<iostream> 2 using namespace std; 3 void fun(int P[])//P这里做为指针使用 4 { 5 cout<<"在函数中"<<sizeof(P)<<endl; 6 } 7 int main() 8 { 9 int A[10]; 10 int* B=new int[10]; 11 cout<<"数组名"<<sizeof(A)<<endl; 12 cout<<"指针"<<sizeof(B)<<endl; 13 fun(A); 14 }
或者spa
1 #include<iostream> 2 using namespace std; 3 void fun(int *P) 4 { 5 cout<<"在函数中"<<sizeof(P)<<endl; 6 } 7 int main() 8 { 9 int A[10]; 10 int* B=new int[10]; 11 cout<<"数组名"<<sizeof(A)<<endl; 12 cout<<"指针"<<sizeof(B)<<endl; 13 fun(A); 14 }
结果输出: .net
数组名40
指针4
在函数中4指针
因而可知,数组名并非彻底等同于指针。虽然它们均可以经过指针方式访问数组。code
可是数组在做为函数参数传递过程当中,会退化成指针。这也是为何指针做为参数传递时,常常要一个长度。(wsj注:指针做为形参时,一般再加上一个形参——这个指针的长度)blog
转自:http://blog.csdn.net/kangroger/article/details/20653255io