Pagina 1 di 2
(Risolto) [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:07
da preben
Un saluto a tutti!
Vi chiedo una spiegazione su due dichiarazioni che non riesco a capire; il linguaggio è il C
Prima:
Seconda:
Ciao e grazie!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:11
da simo_magic
sono vettori di puntatori ad intero
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:14
da preben
Sì, questo lo sospettavo.
Mi sai dire per piacere la differenza tra le due dichiarazioni?
Ciao e grazie!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:17
da simo_magic
a*b/c
(a*b)/c
direi che dovrebbe essere un esempio calzante a meno di grossi scivoloni...
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:39
da preben
Scusa se son duro.
Io ho sempre visto dichiarare i puntatori ad interi in questo modo:
Nelle dichiarazioni che ho postato all'inizio è presente un [5].
Come la posso decifrare la dichiarazione?
Spero di essermi spiegato chiaramente.
Ciao e grazie!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:40
da simo_magic
infatti quello è un vettore di variabili, di tipo puntatore ad intero
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:46
da mous16
direi che la seconda è proprio un vettore di puntatori a interi.
la prima non saprei dire: leggendola così sputerei un "puntatore a vettore di interi" ma non credo abbia senso (o forse si a ben pensarci)
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:51
da simo_magic
mous16 ha scritto:
direi che la seconda è proprio un vettore di puntatori a interi.
la prima non saprei dire: leggendola così sputerei un "puntatore a vettore di interi" ma non credo abbia senso (o forse si a ben pensarci)
sono praticamente identiche, l'ho già detto!
la seconda si vede subito che è un vettore di puntatori...
non ha senso un puntatore ad un vettore perchè un vettore è indirizzabile grazie al puntatore al primo elemento, non servirebbe a niente creare un secondo puntatore...
al massimo sarebbe sensato creare un puntatore di puntatore che potrà puntare ad uno qualunque dei puntatori del vettore
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 17:55
da mous16
grazie per la delucidazione (anche se non l'avevo chiesta io)
Comunque è "bello" non sapere queste cose dopo aver passato l'esame di informatica 1 (tutta e solo programmazione in C)
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 18:00
da simo_magic
euhmm mous16 non per mettere il dito nella piaga ma io faccio 4a superiore (rotfl)
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 18:55
da mous16
ecco... ora mi sento davvero sminuito (e siche ho pure preso un ottimo voto in info, e me ne vantavo)!!!
Complimenti, hai davanti un ottimo futuro!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 19:00
da VonNeumann
belin ha scritto:
Un saluto a tutti!
Vi chiedo una spiegazione su due dichiarazioni che non riesco a capire; il linguaggio è il C
Prima:
Seconda:
Ciao e grazie!
la prima è un array di 5 puntatori ad interi
la seconda è un puntatore ad un array di 5 interi .. in pratica un puntatore a puntatore ...la dichiarazione è resa Ambigua dalla presenza delle parentesi todne che cambiano la priorità a tutta l'espressione.
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 19:04
da VonNeumann
simo_magic ha scritto:
mous16 ha scritto:
direi che la seconda è proprio un vettore di puntatori a interi.
la prima non saprei dire: leggendola così sputerei un "puntatore a vettore di interi" ma non credo abbia senso (o forse si a ben pensarci)
sono praticamente identiche, l'ho già detto!
la seconda si vede subito che è un vettore di puntatori...
non ha senso un puntatore ad un vettore perchè un vettore è indirizzabile grazie al puntatore al primo elemento, non servirebbe a niente creare un secondo puntatore...
al massimo sarebbe sensato creare un puntatore di puntatore che potrà puntare ad uno qualunque dei puntatori del vettore
attenzione!!! (nono)
un puntatore ad un array è un puntatore a puntatore!!! ha senso e come!!!
il meccanismo del doppio puntatore è proprio quello che consente di realizzare il trasferimento per indirizzo in C che altrimenti non sarebbe possibile!!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 19:05
da Ikitt
VonNeumann ha scritto:
belin ha scritto:
Un saluto a tutti!
Vi chiedo una spiegazione su due dichiarazioni che non riesco a capire; il linguaggio è il C
Prima:
Seconda:
Ciao e grazie!
la prima è un array di 5 puntatori ad interi
la seconda è un puntatore ad un array di 5 interi .. in pratica un puntatore a puntatore ...la dichiarazione è resa Ambigua dalla presenza delle parentesi todne che cambiano la priorità a tutta l'espressione.
confermo, e conferma anche cdecl:
Codice: Seleziona tutto
$ cdecl explain 'int (*frog)[5]'
declare frog as pointer to array 5 of int
$ cdecl explain 'int *frog[5]'
declare frog as array 5 of pointer to int
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 19:08
da mous16
@Tutti: benchè la discussione mi interessi molto, credo di non essere all'altezza di rispondere... Assumo la parte dell'ascoltatore!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 19:25
da simo_magic
VonNeumann ha scritto:
simo_magic ha scritto:
mous16 ha scritto:
direi che la seconda è proprio un vettore di puntatori a interi.
la prima non saprei dire: leggendola così sputerei un "puntatore a vettore di interi" ma non credo abbia senso (o forse si a ben pensarci)
sono praticamente identiche, l'ho già detto!
la seconda si vede subito che è un vettore di puntatori...
non ha senso un puntatore ad un vettore perchè un vettore è indirizzabile grazie al puntatore al primo elemento, non servirebbe a niente creare un secondo puntatore...
al massimo sarebbe sensato creare un puntatore di puntatore che potrà puntare ad uno qualunque dei puntatori del vettore
attenzione!!! (nono)
un puntatore ad un array è un puntatore a puntatore!!! ha senso e come!!!
il meccanismo del doppio puntatore è proprio quello che consente di realizzare il trasferimento per indirizzo in C che altrimenti non sarebbe possibile!!
piano e calma
un puntatore ad un
intero vettore non esiste e non ha senso. spero che concorderai
intendevo specificare che se esiste un puntatore che punta ad un qualcosa nel vettore allora quel qualcosa dovrà puntare a qualcosa che tutti gli elementi del vettore condividono,cioè il puntatore in testa al vettore
tanto per capirci una idea di questo tipo è sbagliata
a è il puntatore che gestisce il vettore, p quello che punta nel primo caso a tutto il vettore(errato ed impossibile da realizzare), nel secondo caso al puntatore che gestisce il vettore(corretto)
a--->|_|_|_|_|_|_|
{________}
^
|
p
con la freccia e la graffa(si capisce? brutta ascii art lo so) che punta a TUTTO il vettore non sarebbe tecnicamente corretto
p--->a--->|_|_|_|_|_|_|
con il puntatore p che punta alla testa del vettore si
spero mi sia chiarito

Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 20:00
da bite
Codice: Seleziona tutto
#include <stdio.h>
int main ()
{
int * pippo [5]; /* Array di 5 puntatori a intero */
int (*pluto) []; /* Puntatore ad un array di interi */
int paperino [5]; /* Array di interi */
int numero = 100; /* Intero scalare */
pippo[3] = № /* Assegno uno dei 5 puntatori dell'array */
pluto = &paperino; /* Assegno il puntatore all'array */
paperino[3] = 101; /* Assegno un valore ad un elemento dell'array */
printf ("%d %d\n", *pippo[3], (*pluto)[3]);
return 0;
}
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 20:46
da preben
Ringrazio tutti per i vari aiuti!
Ora ho le idee un pò più chiare.
Grazie a tutti.
Ciao!
Re: [C] Spiegazioe di una dichiarazione
Inviato: giovedì 21 febbraio 2008, 20:57
da preben
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!
Re: [C] Spiegazioe di una dichiarazione
Inviato: venerdì 22 febbraio 2008, 8:53
da VonNeumann
simo_magic ha scritto:
VonNeumann ha scritto:
simo_magic ha scritto:
mous16 ha scritto:
direi che la seconda è proprio un vettore di puntatori a interi.
la prima non saprei dire: leggendola così sputerei un "puntatore a vettore di interi" ma non credo abbia senso (o forse si a ben pensarci)
sono praticamente identiche, l'ho già detto!
la seconda si vede subito che è un vettore di puntatori...
non ha senso un puntatore ad un vettore perchè un vettore è indirizzabile grazie al puntatore al primo elemento, non servirebbe a niente creare un secondo puntatore...
al massimo sarebbe sensato creare un puntatore di puntatore che potrà puntare ad uno qualunque dei puntatori del vettore
attenzione!!! (nono)
un puntatore ad un array è un puntatore a puntatore!!! ha senso e come!!!
il meccanismo del doppio puntatore è proprio quello che consente di realizzare il trasferimento per indirizzo in C che altrimenti non sarebbe possibile!!
piano e calma
un puntatore ad un
intero vettore non esiste e non ha senso. spero che concorderai
intendevo specificare che se esiste un puntatore che punta ad un qualcosa nel vettore allora quel qualcosa dovrà puntare a qualcosa che tutti gli elementi del vettore condividono,cioè il puntatore in testa al vettore
tanto per capirci una idea di questo tipo è sbagliata
a è il puntatore che gestisce il vettore, p quello che punta nel primo caso a tutto il vettore(errato ed impossibile da realizzare), nel secondo caso al puntatore che gestisce il vettore(corretto)
a--->|_|_|_|_|_|_|
{________}
^
|
p
con la freccia e la graffa(si capisce? brutta ascii art lo so) che punta a TUTTO il vettore non sarebbe tecnicamente corretto
p--->a--->|_|_|_|_|_|_|
con il puntatore p che punta alla testa del vettore si
spero mi sia chiarito
concordo in linea di massima, ma permettimi di dissentire dalla spiegazione!!!
Il nome di un array è in tutto e per tutto un puntatore! tant'è vero che gli array si possono usaer, nel C, con l'aritmetica dei puntatori! int a[10] dichiara un array di 10 interi: a è il puntatore all'array ma con questo non intendo il puntatore all'intero array, bensì il puntatore al primo elemento del blocco di memoria destinato all'array!
in pratica detta in maniera semplice è un puntatore!! poiché un puntatore è una particolare variabile che consente di memorizzare l'indirizzo di un'altra variabile purché vi sia identità di tipo
ora se io dichiaro un puntatore ad un array, dichiaro una variabile di tipo puntatore, che punta ad un'altra variabile ( nel nostro conterrà l'indirizzo del primo blocco di memoria destinato all'array )
questo è in tutto e per tutto un puntatore a puntatore
Se poi mi vieni a dire che un puntatore ad un array non punta a tutto l'array, bhé questo è ovvio!!