2012-07-01 47 views
0

可能重複:
How to find the sizeof(a pointer pointing to an array)
Sizeof array passed as parameter使用的sizeof()成員函數內

我有這樣的代碼:

class total { 

public: 
    void display(int []); 
}; 

void total::display(int *arr) 
{ 
    int len = sizeof(arr)/sizeof(int); 
    cout << len; 
} 

int main(void) 
{ 
    int arr[] = { 10, 0, 0, 4, 20 }; 
    total A; 
    A.display(arr); 
    return 0; 
} 

輸出爲而我預計它是陣列的長度, 但是,如果我使用sizeof()語句在main()它顯示5. 那麼,爲什麼sizeof()在成員函數內不顯示正確的值?

+0

http://c-faq.com/aryptr/aryparmsize.html – cnicutar

+0

@Jatin首先,建議,忘記(原始)指針和數組。它們不再使用,因爲我們有shared_ptr和vector。那是二十一世紀。使用XXI世紀工具。其次,在你得到一個,因爲sizeof(arr)得到的ptr大小是4,而sizeof(int)給你4。4/4 == 1.祝你好運。 – smallB

+0

@smallB,我不會同意你的建議。當已經清楚如何使用指針時,應該使用這些好工具。我毫不懷疑賈丁會走到那個階段。另外還有很多情況下,陣列的大小是固定的,等等。錘子是老式的,但它仍然是非常有用的工具。 –

回答

1

sizeof運算符返回操作數的大小。在你的情況sizeof(arr)中,操作數的類型是int*。所以,結果是4或8(取決於平臺,也可以是2或1)。沒有辦法知道函數內部傳遞的數組長度。即使你寫

void total::display(int arr[5]) 
{ 
} 

因爲數組轉換爲指針時,它們被用作方法PARAMS這不會改變任何事情。你仍然可以傳遞任何大小的數組。

+1

您可以通過引用傳遞數組... –

3

sizeof數組操作數產生數組的大小,但指針操作數的sizeof產生指針的大小。指針和數組在C/C++中不一樣。