Ciao a tutti.
In c quando creo un puntatore a puntatore...creo un nuovo puntatore o 2 nuovi puntatori? :bubu:
Ciao a tutti.
In c quando creo un puntatore a puntatore...creo un nuovo puntatore o 2 nuovi puntatori? :bubu:
1 solo
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.)
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....]
esatto...teoricamente puoi avere puntatori a puntatori a puntatori a puntatori.. etc etc.... fin quanti te ene permette il compilatore...
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.
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.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.
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?
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.
io credo di avere capito come funziona la cosa.
r_L punta un elemento fatto cosi: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); }
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.codice:-------------- | info | -------------- | next | -------------- | indirizzo | --------------
NoOriginariamente inviato da Lucked
io credo di avere capito come funziona la cosa.
r_L punta un elemento fatto cosi:
codice:-------------- | info | -------------- | next | -------------- | indirizzo | --------------
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.
*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.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.