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);
どちらを好むかは主にスタイルの問題です。それらはすべて同等であり、同じ速度で実行されます。