sizeof(數組名)和sizeof(指針)


在做這道題時:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM