Forse mi sono espresso male...chiedo scusa.
Magari possiamo risolverla così:
Ora commento il codice del programma così mi dite dove sbaglio.
Giusto?codice:using namespace std;#include <iostream> void cambia(int m, int n[7]){ (*(n+m))--; //n punta a vet[-1], memoria sporca, m = 4, quindi *(*(n+m)) punta a vet[-1+4] e decrementa il valore presente m++; //m=4 diventa m=5 n--; //mi sposto nell'elemento precedente del vettore //ora, siccome, vet-1 è stato passato per indirizzo (perchè gli array sono passati come indirizzi) //ad un altro puntatore (perchè un array, n[7], è un puntatore) avro' che le mie modifiche saranno //salvate sul vettore contenuto nel main: vet[]. Invece la mia variabile locale int m; //non avendo il segno & davanti riceve una copia del valore contenuto in vet[4], quindi le modifiche sono perse. } int main(){ int vet[] ={4,2,3,2,4}; cambia(vet[4], vet-1);//passo alla funzione l'indirizzo del 4°elemento del vettore e lo metto in int m; //poi prendo l'indirizzo della cella di memoria contenente vet, ci sottraggo 1 (cella) e passo questo indirizzo a n[]. //è un po' come se gli avessi passato vet[-1] cambia(0,&vet[4]); //ora, chiamo di nuovo la funzione scambia passando un intero e l'indirizzo di memoria &vet[4]. Domanda: se passo come parametro vet[4] passo il valore contenuto in vet[4] oppure l'indirizzo //della cella di memoria vet[4]? e se avessi passato vet+4? oppure &vet+4? oppure &vet[4]? //Provo a dare la mia idea: // vet+4: passo l'indirizzo del primo elemento + 4, quindi passo l'indirizzo del 5° elemento del vettore //vet[4]: passo il valore contenuto nella posizione vet[4], quindi un intero, nel mio caso =4 //&vet+4: credo valga lo stesso discrorso di vet+4 //&vet[4]: passo l'indirizzo di memoria del 5° elemento dell'array //in questo caso, l'ultimo elemento dell'array sara' decrementato di 1, perchè passando &vet[4] //identifico l'ultimo elemento del mio array, gli sommo la variabile m che nel mio caso ha ricevuto //come parametro il valore 0, poi con (*(n+m))-- decremento l'ultimo elemento del vettore. //dopo di che fa anche un m++ ma non serve a molto e poi fa n-- e quindi sposta il puntatore //indietro di un elemento dell'array (nulla di rilevante ai fini dell'alterazione dei valori nell'array). //siccome si parla ancora di vettori ho che sono stati passati per indirizzo, quindi le modifiche sono state salvate int i=0; for(i=0; i<5; i++) cout << vet[i]; return 0; }

Rispondi quotando