2017-02-12 76 views
0

我初始化了一個大小爲10的數組,但是在打印sizof數組時顯示了40。代碼如下,Sizeof(Array)打印錯誤值

#include <iostream> 

using namespace std; 

int main() { 
    int arr[10] = {2,4,5,6,7,8,9,6,90}; 

     printf("%d \n" , sizeof(arr)); 

} 

輸出:

/Users/venkat/Library/Caches/CLion2016.1/cmake/generated/InsertionSort-e101b03d/e101b03d/Debug/InsertionSort 
40 

Process finished with exit code 0 

什麼ç打印40在這裏?

+1

使用'的printf( 「%つ\ n」 個,的sizeof(ARR)/的sizeof(ARR [0]);''% d'用於'int' –

+0

[請參閱此處的C文檔。](http://port70.net/~nsz/c/c11/n1570.html#6.5.3.4) – alk

+0

'using namespace std;'is無效的標準C代碼 – chux

回答

5

sizeof返回所述陣列的存儲器中的大小,而不是陣列的長度的字節數。則由於sizeof(int)爲4個字節和您的陣列具有10個INT值,其大小爲40

+0

並注意sizeof返回size_t,並且必須使用「%zu」格式打印以避免未定義的行爲。 – Jens

1

因爲sizeof是一個內置的運算符,它對錶達式的類型起作用。對於數組(而不是指針),它將打印sizeof(array_element_type) * array_length

在系統上,它必須是sizeof(int)是4

一旦你在學習感到興奮的是

sizeof(array)/sizeof(array[0]) == array_length 

記住,一旦你傳遞數組到一個函數,它會衰減到一個指針,這將不再成立。

1

您的數組包含10個整數。 10 * sizeof(int)

int是32 bits = 4 bytes. 4 * 10 = 40。簡單的數學

1

您需要通過一個元件的大小來劃分的sizeof(ARR): 的sizeof(ARR)/的sizeof(ARR [0])

這是因爲的sizeof(ARR)示出了參數是由,即的sizeof(int)的*陣列漁政