Puntatori e strutture

di il
17 risposte

Puntatori e strutture

Vorrei dei chiarimenti circa un passaggio in questo programma
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

---

Nella riga [code]  PPersona lista = NULL;
viene dichiarato "lista" come puntatore a struttura TPersona grazie alla definizione del tipo PPersona.
Però, nella riga
      insert(nome, cognome, eta, &lista);
entra, come argomento della funzione "&lista". Essendo "lista" di per se puntatore, nella funzione entra l'indirizzo di un puntatore? qual è il senso?
Conseguentemente non capisco il senso della scrittura "PPersona *pl" nella riga
void insert(char * nome, char *cognome, int eta, PPersona *pl)
. Potete chiarire il tutto?

17 Risposte

  • Re: Puntatori e strutture

    Sì, è un puntatore al puntatore (e si scrive appunto PPersona *)

    Serve a poter modificare il puntatore passato.
  • Re: Puntatori e strutture

    E il puntatore a puntatore "pl" a che punta?
    All'indirizzo di memoria occupato dal puntatore "lista" che a sua volta puntava a NULL ?
  • Re: Puntatori e strutture

    La funzione insert() usa pl per far sapere al chiamante dove si trova la memoria che è stata allocata dinamicamente, e lo fa copiando nello spazio di memoria puntato da pl il puntatore alla memoria allocata.
  • Re: Puntatori e strutture

    Si chiama puntatore a puntatore proprio perché il primo punta alla zona di memoria dove c'è il secondo.
  • Re: Puntatori e strutture

    "pl" punta alla zona di memoria dove c'è "lista", quindi?
  • Re: Puntatori e strutture

    No. pl punta in memoria dove c'è il puntatore alla lista.

    Doppio puntatore

    Mi sa che quello che ha scritto AldoBaldo ti ha confuso
  • Re: Puntatori e strutture

    In termini facili: nel main viene dichiarato un puntatore a struttura di nome "lista".
    "lista" si trova a Roma e non punta a nulla (almeno all'inizio)
    pl è un puntatore a puntatore, quindi punta a Roma?
    Giusto?
  • Re: Puntatori e strutture

    Se per te sono termini "facili" ... (per me sbagliati) ... comunque sì ... qualsiasi sia "Roma" ...

    pl punta alla zona di memoria dove è posizionato un puntatore alla struttura. Non c'è molto altro da dire.
  • Re: Puntatori e strutture

    Okey perfetto, quindi la riga
    curr = *pl;
    come si traduce?
    è come dire che faccio puntare a "curr" la zona di memoria puntata da pl, ovvero l'indirizzo del puntatore "lista"?
    Oppure curr punta a Null, ovvero a ciò a cui puntava "lista"?
    Non mi è molto chiaro.. Chi è (*pl)?
  • Re: Puntatori e strutture

    Scusa Francesco ma tu li hai studiato i puntatori, in generale, non parlo di quelli doppi ...

    Con

    *pl

    dereferenzi il puntatore e ottieni ciò a cui il puntatore sta puntando ANCHE se è un altro puntatore ciò a cui sta puntando. Ovvero, dal secondo puntatore ottieni il primo.
  • Re: Puntatori e strutture

    Si, certo, conosco l'operatore *
    La riga pone "curr" uguale all'oggetto puntato da pl.
    Pl punta ad un puntatore, ovvero "lista" che a sua volta punta a Null.
    Quindi è come eguagliare "curr" a "lista", adesso curr punta alla stessa cosa a cui punta "lista", ovvero a Null.
    Ho capito bene?
  • Re: Puntatori e strutture

    Sì ...
  • Re: Puntatori e strutture

    E' come se fosse una caccia al tesoro... "vai lì, che ci trovi un bigliettino dove ti si dice dove trovare quel che cerchi!".

    Oregon, nel mio commento precedente son stato corretto e preciso (molto più che in questo). In italiano.
  • Re: Puntatori e strutture

    Non è la funzione che fa sapere al chiamante qualcosa, semmai è il chiamante che fornisce una informazione alla funzione.
Devi accedere o registrarti per scrivere nel forum
17 risposte