Buongiorno,
ho fatto un programma che raddoppia il numero delle 'a' presenti nella stringa di 10 caratteri immessa dall'utente. In particolare ho usato le liste.
Cio' che non capisco è perchè in questa funzione:
se non utilizzo il puntatore supporto e scrivo:codice:void elabora(tp *lista) {elem *cursore,*supporto; if(*lista!=NULL) {if((*(*lista)).c=='a') {cursore=malloc(sizeof(elem)); cursore->c='a'; cursore->prox=*lista; *lista=cursore; cursore=NULL; supporto=(*(*lista)).prox; elabora(&(supporto->prox));} else elabora(&((*(*lista)).prox));}}
il compilatore mi dice che , nella riga sopra evidenziata , l'argomento di elabora è sbagliato...codice:void elabora(tp *lista) {elem *cursore; if(*lista!=NULL) {if((*(*lista)).c=='a') {cursore=malloc(sizeof(elem)); cursore->c='a'; cursore->prox=*lista; *lista=cursore; cursore=NULL; elabora(&((*(*lista))->prox));} else elabora(&((*(*lista)).prox));}}
a me pero' le due soluzioni sembrano identiche, nel senso che se viene trovata la 'a' riparte la esecuzione della funzione prendendo come parametro attuale :
A cosa è dovuto?codice:&((*(*lista))->prox)
PS La lista è cosi strutturata:
codice:struct elemento{char c; struct elemento *prox;}; typedef struct elemento elem; typedef elem *tp; tp lista1;

Rispondi quotando