Pagina 2 di 2
Re: [C] Spiegazioe di una dichiarazione
Inviato: venerdì 22 febbraio 2008, 9:44
da bite
belin ha scritto:
A proposito, visto che ci siamo, e visto che siete molto preparati...
...così vi spremo un pò...

Poteste, per piacere, farmi qualche esempio di utilià delle due dichiarazioni?
Ciao e sempre grazie!
L'array di puntatori ti permette di raccogliere in un array puntatori ad entità (variabili, strutture, funzioni...) uniformi per tipo che stanno dove vogliono loro (ad esempio la prima potrebbe essere un elemento di un altro array, la seconda una variabile sciolta, la terza un membro di una struttura, e così via) e di gestirle comodamente, ad esempio con un loop.
Oppure ti permette di dichiarare l'array alle sue dimensioni massime e poi di allocare dinamicamente solo gli elementi che ti servono davvero (questo ha senso se il puntato occupa più memoria del puntatore).
Il puntatore ad un array ha l'utilità che hanno in generale tutti i puntatori:
1) passare argomenti ad una funzione senza copiarli
2) vedere i dati sotto un'altra forma tramite cast
e infine non dimentichiamo la più importante:
3) fare segmentation fault (rotfl)
Devo dire che non ho mai provato nella mia vita l'impulso irresistibile a fare uso di puntatori ad array.
In generale, in C++ si sente molto meno il bisogno dei puntatori, perché ci sono le reference.
Re: [C] Spiegazioe di una dichiarazione
Inviato: venerdì 22 febbraio 2008, 16:09
da preben
Grazie bite, mi hai tolto dei macigni dallo stomaco.
Sei stato dettagliato e preciso.
Ciao e un grazie ancora a tutti.
Ora sono sicuro di aver risolto la questione.
Ciao!
Re: (Risolto) [C] Spiegazioe di una dichiarazione
Inviato: domenica 24 febbraio 2008, 1:52
da mous16
belin ha scritto:
Grazie bite, mi hai tolto dei macigni dallo stomaco.
Sei stato dettagliato e preciso.
Ciao e un grazie ancora a tutti.
Ora sono sicuro di aver risolto la questione.
Ciao!
Quoto
Re: (Risolto) [C] Spiegazioe di una dichiarazione
Inviato: mercoledì 27 febbraio 2008, 10:43
da IppatsuMan
Tanto per riassumere la cosa la regola d'oro quando si leggono le dichiarazioni C è:
Inizia dal nome della variabile (o dalla dichiarazione più interna se non c'è alcun identificatore). Guarda a destra senza saltare una parentesi è dì quello che leggi. Leggi a sinistra senza saltare una parentesi e dì quello che leggi. Esci dal primo blocco di parentesi, guarda a destra senza saltare parentesi e dì quello che leggi. Guarda a sinistra e dì quello che leggi. Esci da un blocco di parentesi, leggi a destra, leggi a sinistra... e così via finché non hai finito tutto.
Quindi, prendendo int *frog[5]; si hanno i passi:
- (guardo al centro) frog è
- (guardo a destra) frog un array di 5
- (guardo a sinistra) puntatori a...
- (guardo a destra) {non c'è nulla}
- (guardo a sinistra) intero
Quindi frog è un array di dimensione 5 di puntatori a int.
Prendendo int (*frog)[5] si ha:
- (variabile) frog è
- (guardo a destra) {c'è una parentesi che non posso saltare}
- (guardo a sinistra) un puntatore a...
- (salto il blocco di parentesi e guardo a destra) un array di 5...
- interi
Quindi frog è un puntatore a un array di 5 interi.
Funziona anche con i puntatori a funzione, ad esempio char *(*foo)();
- foo è
- (guardo a destra: non c'è nulla, guardo a sinistra) un puntatore a...
- (tolgo le parentesi e guardo a destra) funzione (le "()" vogliono dire "funzione")
- (guardo a sinistra) che restituisce un puntatore a...
- (guardo a destra: non c'è nulla, guardo a sinistra) char
Quindi char *(*foo)() vuol dire che foo è un puntatore a una funzione che restituisce un puntatore a char.
Re: (Risolto) [C] Spiegazioe di una dichiarazione
Inviato: giovedì 28 febbraio 2008, 10:51
da preben
Grandissimo!
Spiegazione eccezionale.
Grazie. Ciao!