簡體   English   中英

c 中的 sizeof 運算符

[英]sizeof operator in c

我對此代碼有疑問:

int main()
{
    printf("%d",sizeof(""));
}

它打印1 ,為什么?

它是包含\0 (Null) 字符的字符串,其大小為1 Byte

"" = \0 (空字符)。 這是1個字節。 因此它的大小為 1。

我將作者的問題解釋為為什么打印 1 而不是 4 或 8(指針大小),而不是為什么字符串的大小 == 連續非零字節數加 1。

main(){printf("%d", sizeof((const char *)""));}

上述程序的output是8(我機器上的指針大小)。 在這種情況下,編譯器將 "" 視為在以下情況下的處理: { const char *pointer = ""; },不像這樣 { char c[] = ""; }。 (如果您熟悉 x86 asm,它本質上是 lea 與 mov)后者在堆棧上為“緩沖區”保留 1 個字節,初始化為 '\0'。

字符串文字""char[1]類型(一個元素的char數組,NUL 字節),而不是char* / const char* 因此sizeof產生數組的大小,即 1 個字節。

"" == 空字符串或 null 終止的指向字符的指針。

由於 null 終止符,它打印 1。

IE

"" 真的等於 '\0'

在 C 中, sizeof運算符以字節數返回數據類型的大小。 在您的情況下,一個空的 "" 花費您 1 個字節,因此它返回值 1。

您的程序實際上具有未定義的行為,因為%d不是size_t表達式的有效格式說明符。 您應該使用%zu或者將sizeof的結果轉換為int 否則,現有的答案是可以的。

暫無
暫無

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

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