看來你的印象是array[10]
指定下整個數組 - 它不。它指定array
的第11個元素,它不存在(假設您聲明爲some_type array[10]
)。因爲在C中,名稱是一個數組,因此您需要將fwrite()作爲array
的第一個元素的地址,這恰好就是array
(或&array[0]
),因爲在C中,數組在表達式中使用時,是其第一個元素的地址(除了sizeof
運算符)。
編譯器具有關於數組類型和元素類型的完整信息,因此它可以檢測何時在需要指針的位置編寫int
類型的表達式。
有一種方法來fwrite()將一個完整的陣列,獨立大小和元件類型的,只使用陣列標識符:
fwrite (array, sizeof *array, sizeof array/sizeof *array, file);
其中sizeof *array
計算結果爲元件的尺寸和sizeof array/sizeof *array
評估爲的數量數組中的元素。請注意,這適用於數組,只適用於,不適用於指針。同樣可以用
fwrite (array, sizeof array, 1, file);
或
fwrite (array, 1, sizeof array, file);
它基本上是你喜歡的風格問題來實現;它們都是等效的,並且將以相同的速度執行。
你能告訴我們'array'的聲明嗎? – Jens 2013-02-26 09:07:03