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...
questo codice fa tranquillamente il suo lavoro stampando tutti i valori dell'array, sia incrementando l'indice che usando l'aritmetica dei puntatoricodice: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';
a questo punto però provo a scrivere
e maledizione funziona anche questo codicecodice: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';![]()
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![]()
![]()
![]()
![]()
![]()