Salve, ho alcuni dubbi riguardanti la scrittura/lettura di un file binario in C++.

Faccio riferimento al libro di testo Herbert Schildt, "C++ The Complete Reference, 4th Edition", dove le funzioni fwrite e fread sono così definite:

size_t fread(void *buffer, size_t num_bytes, size_t count, FILE *fp);

size_t fwrite(const void *buffer, size_t num_bytes, size_t count, FILE *fp);

I miei dubbi sono i seguenti:

1) Perché in fwrite il puntatore *buffer è di tipo const void e non semplicemente void?

2) Supponiamo che io voglia scrivere su un file binario un vettore intero:
(uso Dev-C++ 4.9.9.2, non so se sia utile specificarlo)

codice:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

int main()
{
int V[] = {1,2,3,4,5};

FILE *fp;

fp = fopen("myfile.bin", "wb");
if(fp == NULL)  
{
 cout<<"\nImpossibile aprire il file \n";
 return 1;
}

fwrite(V, sizeof V, 1, fp);
fclose (fp);


return 0;
}
L'espressione fwrite(V, sizeof V, 1, fp); dice che sto scrivendo, su myfile.bin, 1 blocco di dati da sizeof V bytes, cioè, un blocco da 20 bytes.

Intuitivamente, io sarei portato a credere che trasferire un vettore int V[5] voglia dire trasferire 5 blocchi di dati da 4 bytes ciascuno, ma in tutti gli esempi che sono riuscito a trovare, il terzo argomento di fwrite/fread è sempre 1.

E' errata la mia interpretazione? Cosa determina il numero di blocchi da trasferire? Qual è il massimo numero di bytes da poter trasferire "con un solo blocco"?
Il mio dubbio vale sia per fwrite che per fread.


Grazie anticipatamente.