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).