c'è qualcosa che non mi torna...
se dichiaro un array di 10 elementi, viene allocata memoria solo e soltanto per quei dieci elementi...

se per caso dovessi assegnare un dato valore ad un ipotetico undicesimo elemento, commetterei un errore logico, in quanto questo valore verrebbe scritto in una zone di memoria che non so a cosa corrisponde...

codice:
int prova_array[] = { 1, 2, 3, 4 };
for (int i = 0; i < 4; i++) {
    cout << prova_array[i] << '\n';
}
cout << '\n';

for (int i = 0; i < 4; i++) {
    cout << *(prova_array + i) << '\n';
}
cout << '\n';
questo codice fa tranquillamente il suo lavoro stampando tutti i valori dell'array, sia incrementando l'indice che usando l'aritmetica dei puntatori


a questo punto però provo a scrivere
codice:
prova_array[7] = 15;
for (int i = 0; i < 8; i++) {
    cout << prova_array[i] << '\n';
}
cout << '\n';

for (int i = 0; i < 8; i++) {
    cout << *(prova_array + i) << '\n';
}
cout << '\n';
e maledizione funziona anche questo codice

ovviamente i valori di prova_array[4], [5] e [6] sono presi non so dove dallo stack, ma il valore [7] corrisponde a quello che ho immesso io...

se una cosa del genere posso (forse) capirla incrementando l'indice, utilizzando l'aritmetica dei puntatori proprio non mi ritrovo