簡體   English   中英

為什么sizeof無法正常工作?

[英]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()調用具有未定義的行為。

因為getchar()返回類型是int ,而不是char 您的平台上的sizeof(int)為4。

另外,您應該使用%zu打印size_t值。 使用不正確的格式說明符在技術上是未定義的行為

在C語言中,sizeof運算符僅在運行時針對可變大小數組(VLA)進行評估。 在所有其他情況下,運算符都不會評估其操作數。 它推導表達式的類型,並返回推導類型的對象的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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