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:

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));}}
se non utilizzo il puntatore supporto e scrivo:

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));}}
il compilatore mi dice che , nella riga sopra evidenziata , l'argomento di elabora è sbagliato...
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 :
codice:
&((*(*lista))->prox)
A cosa è dovuto?

PS La lista è cosi strutturata:
codice:
struct elemento{char c;
                  struct elemento *prox;};
typedef struct elemento elem;
typedef elem *tp;
tp lista1;