簡體   English   中英

為什么sizeof(char + char)返回4?

[英]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 結果的類型為intsizeof(int)在您的平台上顯然為4。 那就是你看到的4。

並且不要使用%dprintf 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM