Originariamente inviato da tia86
Perchè? Tanto il compilatore associa ad 'array' un indirizzo (non alloca niente in memoria), quindi dire array o &array è la stessa cosa (è come chiedere l'indirizzo dell'indirizzo, un controsenso ma il compilatore lo accetta lo stesso)
Sì ... ma il compilatore ti segnalerebbe un bel warning! (se hai i warning attivati, ovviamente).
Dire:
codice:
a) array
b) &array
c) &array[0][0]
è indubbio che si ottiene lo stesso indirizzo, e cioè l'indirizzo del primo elemento. Ma il tipo, tecnicamente, è diverso!!!
Mi spiego meglio. Se la funzione è definita:
codice:
void func (int arr[10][10])
solo passare array è giusto, perché gli altri due:
codice:
b) &array è di tipo int (*)[10][10]
c) &array[0][0] è di tipo int *
Da lì il warning ("incompatible pointer type" o qualcosa del genere a seconda del compilatore).