c語言中為什麼都用 d輸出sizeof的運算結果?

時間 2021-05-10 00:50:35

1樓:buzouxun

前面的答案已經說的很好了。我補充一下,可能題主剛開始學沒留意到,%d 的 d 是 decimal 的首字母,decimal 當然創造C語言的大佬沒必要瞎起名字,decimal 是十進位制(整數)的意思。sizeof 返回所佔的位元組數,就是佔了多少個 byte,那的確是個(十進位制)整數的值。

2樓:「已登出」

sizeof返回的是size_t型別,為某種無符號整形的別名,其本質可能是unsigned int、unsigned long甚至unsigned long long。

用%d輸出size_t型別值沒有問題的原因,可能是size_t恰好為unsigned int,同時其值還在int的表示範圍內,或者引數入棧的方式和機器字節序恰好使得printf讀取其值沒出錯。

C99標準以前,正確做法應該是自行確定size_t的真實型別,然後使用對應的轉換符,比如在size_t為unsigned int時,用%u輸出其十進位制表示。

C99標準以後,使用修飾符z來輸出size_t型別,比如%zd輸出size_t的十進位制表示,%zx輸出十六進製制表示。

類似的,像int32_t這種型別,想當然地用%d也是不符合標準的,輸出這種型別,要麼確定它的真實型別,要麼用inttypes.h中提供的巨集:

printf

("a = %"

PRId32"\n

",a);

//a為int32_t型別

C語言中呼叫函式change data 和data change data 有什麼區別?

眼鏡獒 change data 或者data change data 哪有data change data 這種又傳位址又返回修改過後的值的?傳了位址就可以直接修改值,為什麼要有個多餘的返回值?有了返回值就可以在外面接收,為什麼又要傳乙個多餘的位址? 差乙個賦值操作。assume data is 1...

為什麼 C 語言的輸入輸出函式比 C 的輸入輸出流要快?

nolanzz 用流輸出的話,貌似用cerr會比cout更快一些 提醒使用std ios sync with stdio false 這個會導致流讀寫和標準讀寫不能混用,oj上讀寫會出現問題,我本地使用clang貌似沒有問題 cin cout這些不能和scnaf printf這些一起用 Isaac ...

c語言中 p a什麼意思?

Flint Stone 首先 C語言 其次這是乙個指標,指標是什麼?是控制位址的指標的常用運算子 先說後面那個,你學C語言,那麼你肯定用過scanf d n 這樣的輸入吧,n是輸入到n的位址,就是取位址符,你可以試試cout n endl 輸出是乙個位址,十六進製制的。你可以找一篇部落格好好看看。定...