2016-01-26 25 views
-2

我在C程序中使用Windows 10的代碼塊。我正在寫下這個程序,但不是給出12而是給出了24作爲輸出。我也使用在線編譯器檢查過它,但它仍然給出相同的輸出。爲什麼sizeof()沒有給int數組賦予不同的結果?

#include<stdio.h> 
int main() 
{ 
    int num[]={5,7,9,0,1,7}; 
    printf("%d",sizeof(num)); 
    return 0; 
} 
+3

不要使用' 「%d」'打印'sizeof'使用' 「%俎」'。另外,它爲什麼應該是12?你不覺得打印'sizeof(int)'? –

+0

@Rock你沒有解釋你爲什麼期望輸出爲12.請解釋 – Michi

回答

3

而是讓12它給24作爲輸出

不知道爲什麼你會期望輸出爲12。您可能假設sizeof(int)2,這在所有平臺上都不一定是正確的。

sizeof(int)是平臺相關的,sizeof(int)4在您的平臺上。因此,輸出是24

注:要打印size_t(這是sizeof()回報),使用%zu

printf("%zu",sizeof(num)); 
2

也許這可以幫助您理解:

#include <stdio.h> 

int main() 
{ 
    int num[] = { 5, 7, 9, 0, 1, 7 }; 

    printf("sizeof(int) = %zu\n", sizeof(int)); 

    printf("sizeof(num[0]) = %zu\n", sizeof(num[0])); 

    printf("sizeof(num) = %zu\n", sizeof(num)); 

    printf("number of elements in num[]: %zu\n", sizeof(num)/sizeof(num[0])); 

    return 0; 
} 

輸出:

sizeof(int) = 4 
sizeof(num[0]) = 4 
sizeof(num) = 24 
number of elements in num[]: 6 

現在,如果你把它翻譯成帕斯卡:

program sizetest; 

var 
    num: array[1..6] of integer; 

begin 
    writeln('sizeof(integer) = ', sizeof(integer)); 
    writeln('sizeof(num[1]) = ', sizeof(num[1])); 
    writeln('sizeof(num) = ', sizeof(num)); 
    writeln('number of elements in num[]: ', sizeof(num)/sizeof(num[1])); 
end. 

會得到以下的輸出:

sizeof(integer) = 2 
sizeof(num[1]) = 2 
sizeof(num) = 12 
number of elements in num[]: 6 

最後(我希望它不會破壞你的世界),看看它支持非常大的整數蟒蛇:

import sys 

sys.getsizeof(int()) 
24 

是的,二十四個!所以現在應該清楚int的大小實際上取決於平臺。

又讀https://en.wikipedia.org/wiki/Integer_(computer_science)

+0

我期望12,因爲int的大小是2個字節。我知道這是平臺依賴性的。但在線的審問者也給了相同的 – Rock

+0

所以,如果你知道它是平臺依賴的,你爲什麼認爲它是2? –

+0

因爲在每本書中它的大小都是2的。所以我認爲在線編譯器就是這種形式。其實這個問題是在能力測試中被問到的。那麼,我應該選擇什麼作爲答案? – Rock

相關問題