|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 678
|
[C/PHP] Strani operatori per scrivere estensioni per PHP
Ciao a tutti,
Da un pò di tempo mi sto cimentando nello scrivere un estensione per PHP in C... Però nel cammino ho incontrato operatori nuovi, mai visti, del tipo: - (void**)&tmp - zval ***data Cosa diavolo sono quelli asterischi?!? Posso capire 1, ma 3 cosa fanno? Possibile che mi sia perso un operatore del C in "tanti" anni? Datimi un consiglio per favore!
__________________
Codice:
Ho Concluso felicemente con : Horizont, Abadir_82, nicola1985, Spytek, Remoz, cristianobon70, salvi06, leleweb, xleaaz, Gekker, ilvise, alexxx19, CèTutto, pidegioan, paquito83, MaRcOmA1986 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non sono operatori diversi, è solo l'operatore * ripetuto tante volte
Il primo è un cast esplicito dell'indirizzo di tmp a void **, cioè un puntatore a puntatore di tipo void. Per il secondo il ragionamento è lo stesso, è un puntatore a puntatore a puntatore di tipo zval. E' probabile che il secondo tu l'abbia trovato come parametro di una funzione. Si può anche usare per allocare un vettore tridimensionale, ma l'uso più comune è quello del passaggio per puntatore di un vettore bidimensionale. Ad esempio: Codice:
void allocaMatrice(int ***m, int r, int c)
{
*m = (int **)malloc(sizeof(int) * r);
for(int i = 0; i < r; ++i)
*m[i] = (int *)malloc(sizeof(int) * c);
}
int **m; allocaMatrice(&m, 10, 5); Si usa il passaggio per puntatore (o anche detto per indirizzo) in modo che i cambiamenti effettuati all'interno della funzione si riflettano anche nel valore della variabile passata dal chiamante. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
scuso l'intromissione, ma il discorso è interessante.
quindi l'operatore * andrebbe ripetutto tante volte quante sono le dimensioni del vettore? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Comunque sì, ovviamente cambia anche l'allocazione, per un vettore tridimensionale ci vorranno due for annidati per allocare le varie matrici. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 678
|
Grazie infinite cionci
Avevo il sospetto che fossero dei puntatori di puntatori... Però mi sfugge il significato e la logica: Ad esempio un puntatore punta l'indirizzo di una variabile, Un puntatore di puntatori a cosa punta? Grazie ancora!
__________________
Codice:
Ho Concluso felicemente con : Horizont, Abadir_82, nicola1985, Spytek, Remoz, cristianobon70, salvi06, leleweb, xleaaz, Gekker, ilvise, alexxx19, CèTutto, pidegioan, paquito83, MaRcOmA1986 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Guardalo come un gioco di scatole cinesi.
Un puntatore contiene l'indirizzo di una variabile, un puntatore a puntatore con tiene l'indirizzo di un puntatore. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 678
|
Dopo un pò di "studio" ho appreso come usare i puntatori di puntatori.
In realtà, all'inizio, non riuscivo a capire a cosa servissero e quali vantaggi portassero.... poi in realtà ho scoperta che sono proprio una bella cosa e in molte casi, ad esempio, possono soppiantare le catene. Grazie ancora!
__________________
Codice:
Ho Concluso felicemente con : Horizont, Abadir_82, nicola1985, Spytek, Remoz, cristianobon70, salvi06, leleweb, xleaaz, Gekker, ilvise, alexxx19, CèTutto, pidegioan, paquito83, MaRcOmA1986 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 678
|
Io le chiamo/mi hanno insegnato cosi , ma in realtà sono comunemente dette "Liste".
Chiamate anche cosi perché con le liste con doppi puntatori, uno l'elemento successivo e uno precedente, formano una "catena"
__________________
Codice:
Ho Concluso felicemente con : Horizont, Abadir_82, nicola1985, Spytek, Remoz, cristianobon70, salvi06, leleweb, xleaaz, Gekker, ilvise, alexxx19, CèTutto, pidegioan, paquito83, MaRcOmA1986 |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mai sentito chiamarle così, sempre double linked list.
Certo, per quelle sono utilissimi i puntatori a puntatori. Servono per cambiare il valore del puntatore all'interno di una funzione e far riflettere il cambiamento sul chiamante |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:16.




















