Chiarimenti liste linkate in C

bio90
Salve a tutti :) vorrei che qualcuno mi aiutasse a chiarire dei dubbi circa le liste linkate.
struct elemento *InserisciElementoInLista(struct elemento *puntLista, char parolaDaInserire[])
int main(void) {....
 printf("Dammi la parola da inserire: ");
    scanf("%s", parola);
    lista = InserisciElementoInLista(lista, parola);
    VisualizzaLista(lista);


void InserisciElementoInLista(struct elemento **puntLista, char parolaDaInserire[]) 
int main(void) {.....
 printf("Dammi la parola da inserire: ");
    scanf("%s", parola);
    InserisciElementoInLista(&lista, parola);
    VisualizzaLista(lista);

ho riportato sopra due pezzi di codice della funzione inserisci in lista. Mi aiutereste a capire perchè nel primo caso si tratta di passaggio di parametri per valore e nel secondo caso invece si tratta di passaggio di parametri per riferimento?grazie anticipatamente

Risposte
apatriarca
Le due funzioni hanno un prototipo diverso e quindi richiedono parametri diversi. In effetti, non esiste un unico modo per implementare una lista in C.

bio90
è giusto però parlare nel primo caso di passaggio di parametri per valore e nel secondo caso di passaggio di parametri per riferimento? nel secondo caso io non passo il valore del puntatore ma l'indirizzo del puntatore che punta al primo elemento della lista,vero?

apatriarca
Nel primo caso passo l'indirizzo al primo elemento della lista, nel secondo passo l'indirizzo ad un puntatore a quell'elemento (probabilmente perché suppongo di voler modificare il primo elemento della lista).

Ovviamente in entrambi i casi potrei modificare il primo elemento della lista, ma mentre nel primo caso l'indirizzo del potenzialmente nuovo primo elemento della lista viene restituito dalla funzione, nel secondo caso viene direttamente modificato il puntatore passato come parametro. Dovendo scegliere preferisco la seconda versione.

bio90
Grazie mille per i chiarimenti!! :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.