[英]Please explain the output of sizeof()
我是c編程的新手,我正在嘗試理解sizeof
函數。
請幫我理解這個程序是如何工作的:
#include<stdio.h>
main( )
{
printf ( "\n%d %d %d", sizeof ( '3'), sizeof ( "3" ), sizeof ( 3 ) ) ;
}
我輸出為4 2 4
。
但是,我無法理解我得到此輸出的原因。 請解釋一下。
sizeof ( '3')
,它是字符常量的大小,它是int
因此您在機器上獲得的值為4
。
sizeof ( "3" )
,它是字符串的大小,即2
。
字符串"3"
由2個字符組成('3'+'\\0')
= "3"
。 我們知道sizeof(char)
是1。
sizeof ( 3 )
,它的大小為int
,在你的機器上為4
。
首先,幾個筆記:
-Wall
。 這應該會給你一個關於你的格式字符串的警告。 %zu
而不是%d
如如何以便攜式打印size_t變量中所述? 。 C標准說sizeof
的結果sizeof
是size_t
(§6.5.3.4/ 5)。 如果您的轉換說明符與您的參數不匹配,則它是未定義的行為 。 在你的問題上。
int
類型,因此sizeof('3')
是sizeof(int)
(在您的機器上看起來是4)。 應用於數組時, sizeof
以字節為單位返回數組的大小。 例如, sizeof(int[10])
在sizeof(int)
為4的機器上返回40.因為sizeof(char)
是1,它將等於字符串文字中的字符數。 正如Jonathan Leffler所解釋的那樣:
sizeof(“f”)必須返回2,一個用於'f',一個用於終止'\\ 0'。
[...]
字符串文字的類型為'char的大小為N的數組',其中N包含終止null。
請記住, 陣列不衰減通過為sizeof 1時的指針。
sizeof(3)
是sizeof(int)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.