un array è un puntatore al suo primo elemento che viene allocato sul momento quindi:

codice:
int array[5];
corrisponde a:

codice:
...
int* array;
...
array = (int*) malloc(5*sizeof(int));//in C ma funzia anche in C++
array = new int[5];//solo in C++
...
se tu fai

codice:
&array
ottieni l'indirizzo dell'array stesso, ovvero l'indirizzo della cella puntatore che contiene l'indirizzo della cella a cui punta, quindi ottieni un puntatore a puntatore:

codice:
int** pTop = &array;//array è un array(ovvero un puntatore al 1° elemento)
Quindi alla funzione passi direttamente array e come tipo di ritorno fai un puntatore, nel caso dell'esempio int*.