porque dice que es esencial pasar la dirección del array ¿no se podría pasar como argumento de la función el arreglo en ves de un puntero y trabajar con el arreglo dentro de la función?
En este caso no. getint extrae de la entrada estándar un valor numérico (dentro de la entrada estándar esatá dispuesto como una cadena), lo transformará a su valor entero correspondiente y lo devolverá via argumento. El valot de retorno de la función sirve para informar si ha tenido éxito o no.
getint es independiente del resto del código, por eso no trabaja con el array. Tan solo toma una cadena de números y devuelve su valor entero correspondiente. El código llamante es el responsable de realizar el trabajo de acomodar los datos, en este caso llenar el array. Y por eso hay que pasar la dirección de la posición del aray, porque getint tan solo espera un puntero a un entero.