Il C lavora solo e soltanto con i passaggi dei valori da una funzione ad un'altra tramite valore.
Ciò nonstante esiste qualche trucchetto che mi consente di fare in modo che un valore che passo come parametro ad una funzione venga poi effettivamente modificato anche all'interno dell'ambiente (ovvero della funzione) chiamante.
Se opero con tipi di dati predefiniti non c'è problema, ma se ad esempio dovessi lavorare con puntatori a liste??
Ad esempio:
dichiaro una struttura del tipo
e tramite la funzione creaLista popolo la lista e restituisco un puntatorecodice:struct lista { int d; struct lista *next; };
adesso voglio crearmi una funzione che chiamerò cambiaElemento la quale prenderà come input un intero che rappresenta il numero di spostamenti che voglio effettuare e il puntatore alla lista.codice:struct lista *creaLista(int val) { if (val < 1) return NULL; else { struct lista *l = (struct lista *) malloc(sizeof(struct lista)); l->d = val--; l->next = creaLista(val); return l; } }
La funzione avrà ritorno void, ma io dovrò modificare l'indirizzo a cui punta il puntatore alla lista (che chiamo l e che è dichiarato nel main) in modo tale che la nuova testa della lista non sarà più il primo effettivo elemento della lista, ma sarà determinata dal numero di spostamenti che dovrò fare (indicati da val) a partire dal primo elemento della lista.
esempio:
se da 1->3->5->4->3->NULL
dico che val = 2 allora il primo elemento della lista diventerà 5 e la lista sarà cosi:
5->4->3->NULL
Tutto ciò per non usare i return e per imparare come si fa un passaggio di parametri per riferimento.codice:void cambiaElemento(int, struct lista *);
Ma come faccio??
Mi date una mano?
Grazie