En GLBasic los arrays son objetos, y por eso se usan referencias.
En C y C++ los arrays son punteros al primer elemento, es decir es igual poner "int enteros[]", que "int *enteros". Cuando se pasa un array a una función realmente estás pasando un puntero al inicio y el tipo de los elementos, que ya lo sabe el compilador por la función. Al pasar la dirección, no hay copia y si cambias el array en la función cambias el array original. Por eso C/C++ es tan eficiente, si se usa bien claro, aunque también puedes liarla bien

El operador &, delante de una variable da la dirección, pero delante de un parámetro de función en C++ permite pasar una referencia. No uses la referencia con arrays en parámetros de función, sino un puntero al tipo de elemento. Por ejemplo: int GetMediaValores(int *valores) { .... }, dentro de la función usarías valores[indice] normalmente, ya que un array es un puntero.
Por ejemplo, en la función scanf se pasan punteros (&) a los valores a rellenar, pues bien cuando se usan cadenas, que son arrays de carácteres no hay que poner el & porque una cadena ya es una dirección, es decir un puntero a su primer carácter.
Ejemplo:
int edad;
char nombre[100];
printf("Dime tu nombre:");
scanf("%s", nombre); // <-- no va con &
printf("Dime tu edad:");
scanf("%d", &numero); // <-- si va con &
printf("Hola %s", nombre);