array[10]
配列全体を指定しているという印象を受けているようですが、そうではありません。array
存在しないの 11 番目の要素を指定します ( として宣言した場合some_type array[10]
)。
配列全体を書きたいと言うので、 fwrite() に の最初の要素のアドレスを渡す必要がありますarray
。これはたまたまarray
(または&array[0]
) です。C では、式で使用された場合の配列の名前であるため、最初の要素のアドレスです (sizeof
演算子を除く)。
int
コンパイラは、配列の型と要素の型に関する完全な情報を持っているため、ポインターが必要な場所に型の式が記述されていることを検出できます。
配列識別子を使用するだけで、サイズや要素の種類に関係なく、完全な配列を fwrite() する方法があります。
fwrite (array, sizeof *array, sizeof array/sizeof *array, file);
wheresizeof *array
は要素のサイズにsizeof array/sizeof *array
評価され、配列内の要素の数に評価されます。これは配列に対してのみ機能し、ポインターに対しては機能しないことに注意してください。同じことが達成できます
fwrite (array, sizeof array, 1, file);
また
fwrite (array, 1, sizeof array, file);
どちらを好むかは主にスタイルの問題です。それらはすべて同等であり、同じ速度で実行されます。