Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [C] puntatori,strutture.. copia o no??

    Salve a tutti,
    vorrei avere qualche informazione a proposito dei puntatori alle strutture, come i puntatori alle liste..

    Ad esempio, data questa struttura:

    typedef struct list_node *list_pointer;
    typedef struct list_node {
    int chiave;
    list_pointer link;
    }lista;

    list_pointer lista;

    se lista fosse una lista con 10 elementi ad esempio e io poi dichiarassi in seguito questo:

    list_pointer x = lista; y = lista; z = x;

    cosa succederebbe se io modificassi qualche elemento di x?
    modificherebbe anche la lista originale??
    o lista (la lista originale) non verrebbe modificata per il fatto che x è una copia di lista? e y, viene modificata lo stesso?

    e per z? se modifico z, verra modificato anche x e lista?



    grazie in anticipo

    the sALIEN

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    La regola generale è la seguente: se hai due variabili a e b e fai

    a = b;

    ad a viene assegnata una copia di b, quindi se modifichi a, il valore di b resta invariato.

    Questo pero non deve trarti in inganno nel caso dei puntatori...perche se a e b sono puntatori a strutture, come nel caso delle liste, la regola sopra afferma che il valore della variabile puntatore b viene copiato nella variabile a: ma il valore di b non è il valore della struttura, ma l'indirizzo a cui punta b. In sostanza a e b punteranno alla stessa struttura, quindi se modifichi la struttura puntata da a stai anche modificando la struttura putnata da b perche entrambi puntano alla stessa zona di memoria.

    Viceversa, se a e b non sono puntatori a strutture, ma sono strutture esse stesse, con

    a = b;

    copi tutti i valori di b all'interno di a ottenendo quindi due oggetti separati con gli stessi valori.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ciao anx721 e grazie della spiegazione...
    ho capito... quindi se a e b fossero puntatori a strutture e lo fossero anche c e d, se io facessi questo:
    a = b;

    c= b;

    d = a;


    modificando c, modificherei anche a..giusto?
    the sALIEN

  4. #4
    Si se crei un solo puntatore succede questo.. ma se crei due o più puntatori alla stessa variabile il risultato che ne verrà fuori non è controllabile...poichè la variabile verrà aggiornata non in tempo reale ma solo quando verra distrutto il puntatore..quindi se crei due puntatori alla stessa variabile può darsi che producano due risultati diversi(dipende dalle operazioni alla quale li sottoponi) e poi sarebbe difficile stabilire quale sarà l'ultimo risultato che viene aggiornato...


    Comunque ti invito a leggerti qualcosa in merito perchè l'uso dei puntatori è alla base della programmazione!

    E poi ti invito anche a informarti sui riferimenti che sono molto più comodi da usare!!!!

    buono studio!


  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da thesalien
    ciao anx721 e grazie della spiegazione...
    ho capito... quindi se a e b fossero puntatori a strutture e lo fossero anche c e d, se io facessi questo:
    a = b;

    c= b;

    d = a;


    modificando c, modificherei anche a..giusto?
    la risposta è giusto, anche se è corretto dire "modificando LA STRUTTURA puntata da c modificherei anche la struttura puntta da a, semplicemente perche sono la stessa struttura". Se invece modifichi a come puntatore, modifiche a e basta.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da Whitecrowsrain
    Si se crei un solo puntatore succede questo.. ma se crei due o più puntatori alla stessa variabile il risultato che ne verrà fuori non è controllabile...poichè la variabile verrà aggiornata non in tempo reale ma solo quando verra distrutto il puntatore..quindi se crei due puntatori alla stessa variabile può darsi che producano due risultati diversi(dipende dalle operazioni alla quale li sottoponi) e poi sarebbe difficile stabilire quale sarà l'ultimo risultato che viene aggiornato...
    Questo non è vero...non so cosa te intendi dire...quando si aggiorna una variabile la si aggiorna e basta...

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    Si ho capito, sono la stessa struttura perchè questi puntatori puntano tutti all'indirizzo di a.
    Whitecrowsrain, raccolgo il tuo invito alla lettura e all'approffondimento anche se non ho capito ora chi abbia ragione tra voi due
    the sALIEN

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da thesalien
    anche se non ho capito ora chi abbia ragione tra voi due
    io

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    spero che abbia raggione tu... almeno cosi ho capito
    the sALIEN

  10. #10
    Vabbhe quello che intendevo dire va un po' al di la della domanda che hai fatto..quindi per non confonderti le idee ti dico che quando crei un puntatore ad una struttura non hai fatto una copia ma stai utilizzando la struttura stessa...

    cmq quello che hai scritto non funziona!!

    xkè se a e b fossero due puntatori a strutture e c e d lo fossero lo stesso :

    a = b ; la struttura puntata da a assume il valore della struttura puntata da b;

    c = b ; la struttura puntata da c assume il valore della struttura puntata da b;

    d = a ; la struttura puntata da d assume il valore della struttura puntata da a;

    ora a,b,c,d hanno lo stesso contenuto...ma puntano a strutture diverse quindi se modifichi c modificherai solo la struttura al quale punta c e non a!!! :rollo:
    SPERO KE TUTTO QUESTO TI ABBIA CHIARITO LE IDEE....

    CIAO CIAO

    E STUDIAAA!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.