[英]Why is sizeof a char literal not the same as sizeof(char)?
[英]Why does sizeof(char + char) return 4?
char a, b;
printf("%d", sizeof(a+b));
printf寫入屏幕的內容是什么?
我認為因為sizeof(char)= 1,sizeof(a + b)也將是1,但結果是4.我不明白這一點,如果我們添加兩個字符,為什么寫4?
在C語言中,幾乎所有算術運算符的操作數都受到稱為常規算術轉換的隱式轉換,或者在這種情況下是整數提升 。 char
類型的操作數被提升為int
類型,實際的添加在int
域內執行(或unsigned int
,具體取決於該平台上char
的屬性)。 所以你的a + b
實際上被解釋為(int) a + (int) b
。 結果的類型為int
而sizeof(int)
在您的平台上顯然為4。 那就是你看到的4。
並且不要使用%d
來printf
sizeof
的結果。 sizeof
的結果是size_t
類型,而%d
需要int
參數。 因此,要么使用正確的格式說明符
printf("%zu\n", sizeof(a+b));
或者至少如果你確定它適合的話就拋出論點
printf("%d\n", (int) sizeof(a+b));
這與sizeof(char)
,參數( 即添加的結果 )被提升為int
因此sizeof(a + b)
實際上等於sizeof(int)
。 如果將結果轉換為char
那么它將是您所期望的。 此外,對於正確的格式說明sizeof
結果是size_t
是%zu
而不是%d
。
嘗試
printf("%zu", sizeof((char) (a + b)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.