Credo dipenda dal fatto che tu alla funzione passi a[] che è il puntatore al primo elemento dell'array. Come qualsiasi puntatore, essendo un indirizzo di tipo long int (32 bit ossia 4 byte) il valore restituito da sizeof(a) è appunto 4, così come quello di sizeof(a[0]) giacché a[0] è un intero e quindi anch'esso rappresentato su 4 byte.

Credo che l'unico modo sia calcolare la dimensione dell'array nel main e poi passarla come argomento alla funzione, ma in ogni caso se fai un'allocazione statica dell'array (ma sarebbe lo stesso anche con un'allocazione dinamica) non vedo a cosa ti serve calcolarne la dimensione... cioè non la sai già? Era solo un esempio che facevi?

Comunque il motivo del problema del risultato 5 != 1 è quello che ti dicevo, almeno per quelle che sono le mie conoscenze