Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152

    [C] strutture , puntatori e operazione "->"

    salve sto studiando il linguaggio C e ho appena appreso come funzionano i puntatori e oggetti puntati e sto passando al capitolo delle "liste" definite con una sorta di ricorsione tramite i puntatori.
    Ho un dubbio quando,
    quando creo una struttura si usa spesso/sempre l'operazione "->" ma non riesco a capire a cosa equivale. Ho immaginato che fosse l'equivalente a "&" nei puntatori ma non riesco cmq a utilizzarlo... qualcuno sa spiegarmi in parole povere a cosa serve?
    grazie per la pazienza

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    struct Qualcosa {
       int dato;
    };
    
    
    struct Qualcosa q;
    struct Qualcosa *pq;
    
    pq = &q;
    
    1) q.dato;      
    
    2) (*pq).dato; 
    
    3) pq->dato;
    1) q è una struct. L'accesso al dato si effettua tramite .

    2) pq è un puntatore a una struct. Per accedere al dato devo prima dereferenziare il puntatore pq, tramite (*pq), e poi accedere al dato tramite il punto.

    3) pq è un puntatore a una struct. Per accedere al dato senza dereferenziare il puntatore posso usare l'operatore ->

    In pratica la 3 è la versione breve (ed elegante) di 2.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    [CODE]
    q.dato = 5; //ora dato vale 5

    pq->dato = 6;

    cos'è che sto modificando pq o dato?
    in ogni caso ora pq vale un valore intero o una cella di memoria?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' sempre il dato che viene modificato.

    pq è un puntatore ad una cella di memoria (quindi, il suo indirizzo che è anche un valore intero).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    scusa se insisto
    credo di aver capito il funzionamento ma non riesco ad applicarlo...
    ho creato una struttura libro e volevo copiare un libro l1 in l2 ti copio il codice

    codice:
    #include <stdio.h>  
    
    typedef struct libro{       
      char titolo[500];      
       int pagine;       
      int prezzo;       
      }Libro;    
         
    
    
     main(){      
      
        Libro *puntatore;    
        Libro l1={"bla bla bla", 66, 5};   
         puntatore = &l1;     
       Libro l2={ puntatore->titolo , puntatore->pagine, puntatore->prezzo };     
      
     printf("  Libro 1 : titolo = %s , pagine = %d  , prezzo = %d \n\n\n\n" , l1.titolo, l1.pagine, l1.prezzo);   
         printf("  Libro 2 : titolo = %s , pagine = %d  , prezzo = %d \n\n\n\n" , l2.titolo, l2.pagine, l1.prezzo);   
         }

    lo sto utilizzando nel modo sbagliato?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì ... sbagliato ...

    codice:
        Libro *puntatore;    
        Libro l1={"bla bla bla", 66, 5};   
        puntatore = &l1;     
    
        Libro l2;
      
        strcpy(l2.titolo, puntatore->titolo);
        l2.pagine = puntatore->pagine;
        l2.prezzo = puntatore->prezzo;
    
        printf("  Libro 1 : titolo = %s , pagine = %d  , prezzo = %d \n\n\n\n" , l1.titolo, l1.pagine, l1.prezzo);   
        printf("  Libro 2 : titolo = %s , pagine = %d  , prezzo = %d \n\n\n\n" , l2.titolo, l2.pagine, l1.prezzo);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    ah giusto perchè c'è la stringa ! se erano tutti valori interi avrebbe funzionato!


    grazie mille!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Senza puntatore, puoi scrivere semplicemente

    Libro l2=l1;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.