簡體   English   中英

一行C代碼的邏輯

[英]logic of a line of C code

您能否告訴我在此代碼行17中使用sizeof data / sizeof *data的邏輯?

...
unsigned char data[16];
...
size = fread(data, sizeof *data, sizeof data / sizeof *data, file);
...

謝謝

這是“數組中元素數量”的常見C習慣用法。

由於數組在絲毫挑釁下會衰減為指針 ,因此*data是數組的第一個元素,因此它將數組的總大小除以其第一個元素的大小,得到一個元素數。

對該技術有很多可能的反對意見,無論是基於樣式,還是它僅適用於聲明為數組的變量(不適用於作為指向第一個元素的指針的變量),它都依賴於無指針衰減尚未發生),或C ++代碼中可能發生的破壞情況; 也就是說,它在較舊的C代碼中仍然很常見。

它將數組的總大小除以每個元素類型的大小。 它返回數組中的元素數

它為您提供了數組中元素的數量。 因為它是一個編譯時值,而不是運行時值,所以它實際上不評估sizeof()內的任何內容,這很好,因為即使任何指針為null或超出范圍,它也可以工作。

(有趣的事實:在Windows C運行時中,已經有一個_countof()宏可以完全做到這一點,而在Windows SDK中,有ARRAYSIZE()宏也可以完成相同的工作。)

它只是在計算數組中元素的數量-即,整個數組的大小除以數組中第一個元素的大小即可得出元素的數量(數組中的所有元素都具有相同的大小)。

暫無
暫無

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

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