In realtà ho risposto alla tua domanda
Un'array non è un tipo di dato (prova a vederla così), è un'astrazione che costruisci a partire da qualcos'altro.
Quando devi usare una funzione che deve lavorare su un array, passi come argomento qualcos'altro in realtà, non l'array. Passi un puntatore.
Per questo int& AR[4] non ha alcun senso. Tu vorresti passare per riferimento una struttura dati (un array di 4 elementi) che non esiste. Devi passare un puntatore, ricordandoti, come ti ho detto prima che un array è un puntatore:
questo ha senso:
Codice PHP:
void A(int* AR){...}
questo ha senso (un vector è una struttura dati):
Codice PHP:
void A(vector<int>& vi){}
int main(){
vector<int> vi;
A(vi);
}
e questo (non badare troppo alla classe, nota solo l'introduzione di una nuova struttura dati):
Codice PHP:
#include <iostream>
#include <vector>
using namespace std;
class Array
{
public:
Array(int size) : size(size){ ptr = new int[size];}
~Array(){ delete [] ptr; }
int& operator[](int index) const { return ptr[index];}
int& operator[](int index){ return ptr[index]; }
int getSize(){return size;}
private:
int* ptr;
int size;
};
void f(Array& a)
{
for(int i = 0; i < a.getSize(); i++)
a[i] = i;
}
int main() {
Array a(10);
f(a);
for(int i = 0; i < a.getSize(); i++)
cout << a[i] << endl;
}
edit: se sintatticamente ti piace di più, puoi usare
Codice PHP:
#include <iostream>
#include <vector>
using namespace std;
void f(int a[]){
for(int i = 0; i < 3; i++)
//cout << a[i] << endl; // ok
cout << (*a)++ << endl; // è un puntatore
}
int main() {
int a[3] = {0,1,2};
f(a);
}
nella funzione, come parametro, indichi il tipo, il nome seguito da []. Denoti così un array (in sostanza rimane un puntantore però, come puoi notare dagli operatori * e ++).