我在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;
}
我在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;
}
而是讓12它給24作爲輸出
不知道爲什麼你會期望輸出爲12
。您可能假設sizeof(int)
爲2
,這在所有平臺上都不一定是正確的。
sizeof(int)
是平臺相關的,sizeof(int)
是4
在您的平臺上。因此,輸出是24
。
注:要打印size_t
(這是sizeof()
回報),使用%zu
:
printf("%zu",sizeof(num));
也許這可以幫助您理解:
#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的大小實際上取決於平臺。
不要使用' 「%d」'打印'sizeof'使用' 「%俎」'。另外,它爲什麼應該是12?你不覺得打印'sizeof(int)'? –
@Rock你沒有解釋你爲什麼期望輸出爲12.請解釋 – Michi