Du kannst die Anzahl der Elemente des Arrays nicht in einer Funktion ermitteln, weil lediglich nur der Zeiger des ersten Elements übergeben wird, und nicht eine Kopie des Arrays.
Demnach ermittelt sizeof(arr) auch die größe des Zeigers, und der ist 4 Bytes groß (32 Bit). Ein Integer ist ebenfalls 32 Bit groß. Deswegen spuckt sizeof(arr)/sizeof(int) auch 1 aus. Eine Möglichkeit wäre, einen zusätzlichen Parameter mit der Elementenanzahl mit zugeben. Also:
Meine C-Kenntnisse sind aber auch recht eingerostet. Vielleicht gibt es da auch noch eine elegantere Lösung.