Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] puntatore a puntatore

    Ciao a tutti.
    In c quando creo un puntatore a puntatore...creo un nuovo puntatore o 2 nuovi puntatori? :bubu:

  2. #2
    1 solo

  3. #3
    In c un puntatore a puntatore è una variabile che è fatta per contenere l'indirizzo di un'altra variabile che a sua volta è fatta per contenere l'indirizzo della prima locazione di un'area si memoria che tu dovrai provvedere ad allocare con malloc o affini,quindi di pende da come la interpreti...
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    un puntatore è un puntatore.... punto [lol].
    Non importa a cosa punti.. conterrà smepre un indirizzo di memoria... se è un puntatore a puntatore conterrà come dicono sopra un indirizzo di memoria di un altro puntatore che a sua volta conterrà un altro indirizzo di memoria... teoricamente puoi avere puntatori a puntatori a puntatori a puntatori.. etc etc.... fin quanti te ene permette il compilatore...

    Nella pratica è difficile usare più di un doppio puntatore [usato per array di stringhe, per matrici, o con strutture collegate se devi passare ad una funzione un puntatore e far sì che sia modificabile....]


  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    teoricamente puoi avere puntatori a puntatori a puntatori a puntatori.. etc etc.... fin quanti te ene permette il compilatore...
    esatto...

    1)quindi io a una funzione cosi fatta basta che passi l'indirizzo del puntatore a cui punta..a cosa serve dichiarare un puntatore a puntatore a puntatore ecc.ecc..?

    2)quali sono i casi in cui si utilizza un puntatore a puntatore in una funzione e quando un puntatore?

    io credo sia cosi: con un puntatore posso modificare dei dati.
    con un puntatore a puntatore modifico a cosa punta un puntatore.

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da Lucked
    io credo sia cosi: con un puntatore posso modificare dei dati.
    con un puntatore a puntatore modifico a cosa punta un puntatore.
    Se la funzione deve modificare un argomento, bisogna passarne il puntatore, tutto qua. Da ciò consegue che se la variabile da modificare è essa stessa un untatore, alla funzione dovrà essere passato un puntatore a puntatore.


  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ok chiaro.
    Ma ad esempio anx, nel mio programma delle liste, dato che io modificavo sempre un valore di qualcosa potevo usare solo puntatori o era una scelta obbligata punt a punt?

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Nel tuo programma modificavi il puntatore stesso, ad esempio quando inserivi un elemento in testa, per cui dovevi allocare un nuovo nodo e fare in modo che la lista, dopo la funzione, puntasse al nuovo nodo allocato, per cui era necessario il puntatore al puntatore.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    io credo di avere capito come funziona la cosa.

    codice:
     
    status inserisciordinato(lista *r_L, record *d)
    {
      lista L;
      if(*r_L == NULL || strcmp(d->nome, (*r_L)->elemento->nome) < 0 )
      {
        allocanodo(&L, d);
        L->next = *r_L;
        *r_L = L;
      }
      else
        inserisciordinato(&((*r_L)->next), d);
    }
    r_L punta un elemento fatto cosi:

    codice:
    --------------
    |   info     |
    --------------
    |   next     |
    --------------
    |  indirizzo |
    --------------
    ogni qual volta io faccio *r_L, accedo al campo next di questo elemento. E' vero? Provando a ragionare cosi, sul programma..il ragionamento funxiona. Però è chiaro che r_L non punta "solo" a un puntatore.

  10. #10
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da Lucked
    io credo di avere capito come funziona la cosa.

    r_L punta un elemento fatto cosi:

    codice:
    --------------
    |   info     |
    --------------
    |   next     |
    --------------
    |  indirizzo |
    --------------
    No

    r_L punta ad un puntatore che a sua volta punta a un elemento fatto cosi, perche quell'elemento è di tipo nodo, *r_L è di tipo lista, cioè un puntatore a nodo, mentre r_L è un puntatore a lista, cioè un puntatore a un puntatore a nodo.

    Originariamente inviato da Lucked
    ogni qual volta io faccio *r_L, accedo al campo next di questo elemento. E' vero? Provando a ragionare cosi, sul programma..il ragionamento funxiona. Però è chiaro che r_L non punta "solo" a un puntatore.
    *r_L rappresenta il puntatore al tuo nodo, per cui puoi fare (*r_L)->next per accedere al campo next; r_L punta solo a un puntatore, nel senso che il suo valore è l'indirizzo di memoria di una variabile di tipo lista, cioè un altro puntatore a nodo.


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.