Ciao
risposta 3)
Si cout << a , cout << &a[0] sono due notazioni equivalenti, anche se la prima è molto più elegante.
Le notazioni precedenti, valgono anche nel caso di un vettore allocato staticamente, visto che il C++ tratta i vettori sostanzialmente come puntatori.
risposta 4)
Se a è un puntatore ad una locazione di memoria dinamica.
cout << a; // stampa l'indirizzo di memoria al quale punta a.
cout << &a; // stampa la locazione di memoria in cui è allocato il puntatore.
risposta 6)
l'operatore delete serve per deallocare le locazioni di memoria heap (zona di memoria dinamica) impegnate mediante l'utilizzo dell'operatore new. L'operazione di deallocazione del delete è obbligatoria ogni qual volta termina l'utilizzo della parte di memoria heap impegnata con il new, altrimenti si corre il rischio di mandare in crash il sistema (colui che alloca, si occupa anche della deallocazione); questa operazione non fa altro che rendere disponibile la memoria in precedenza utilizzata affinchè possa essere sfruttata da altri processi. Una volta deallocato il puntatore esso punta a 0.
Spero di esserti stato di aiuto.
A presto
Maximo