在做這道題時:
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 }
或者
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 }
結果輸出:
數組名40
指針4
在函數中4
由此可見,數組名並不是完全等同於指針。雖然它們都可以通過指針方式訪問數組。
但是數組在作為函數參數傳遞過程中,會退化成指針。這也是為什么指針作為參數傳遞時,經常要一個長度。(wsj注:指針作為形參時,通常再加上一個形參——這個指針的長度)
轉自:http://blog.csdn.net/kangroger/article/details/20653255