[英]Why doesn't sizeof work as expected?
#include <stdio.h>
int main(void)
{
printf("%d", sizeof (getchar()) );
}
我期望的是
1.鍵入輸入。
2.讀取輸入並返回輸入值。
3.評估sizeof值。
4.打印sizeof值。
但是第一步永遠不會發生。
為什么第一步沒有發生?
除非其類型為可變長度數組類型,否則sizeof
運算符不評估其操作數:它查看該類型並返回大小。 這是絕對安全的:
char *ptr = NULL; // NULL ponter!
printf("%zu", sizeof *ptr);
它將返回1
,因為它不必評估表達式即可知道答案。
我期望的是,1.輸入。 2.讀取輸入並返回輸入值。 3.評估sizeof值。4.打印sizeof值。
但是第一步永遠不會發生。 為什么第一步沒有發生?
因為除了極少數例外, sizeof
運算符不會評估其操作數。 您的用法不是例外之一。 不評估getchar()
意味着未調用getchar()
。
無論如何,我不確定您對代碼的期望。 即使getchar()
被調用時,結果總是相同的類型( int
),它不依賴於輸入。
也要注意@PP的評論。 您的printf()
格式與要打印的數據類型size_t
不匹配。 正如他所觀察到的,結果是printf()
調用具有未定義的行為。
在C語言中,sizeof運算符僅在運行時針對可變大小數組(VLA)進行評估。 在所有其他情況下,運算符都不會評估其操作數。 它推導表達式的類型,並返回推導類型的對象的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.