Vi chiedo una spiegazione su due dichiarazioni che non riesco a capire; il linguaggio è il C
Prima:
Codice: Seleziona tutto
int *frog[5];Codice: Seleziona tutto
int (*frog) [5];Codice: Seleziona tutto
int *frog[5];Codice: Seleziona tutto
int (*frog) [5];

Codice: Seleziona tutto
int *p;


sono praticamente identiche, l'ho già detto!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)



la prima è un array di 5 puntatori ad interibelin ha scritto: Un saluto a tutti!
Vi chiedo una spiegazione su due dichiarazioni che non riesco a capire; il linguaggio è il C
Prima:Seconda:Codice: Seleziona tutto
int *frog[5];Ciao e grazie!Codice: Seleziona tutto
int (*frog) [5];
attenzione!!! (nono)simo_magic ha scritto:sono praticamente identiche, l'ho già detto!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)
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
confermo, e conferma anche cdecl:VonNeumann ha scritto:la prima è un array di 5 puntatori ad interibelin ha scritto: Un saluto a tutti!
Vi chiedo una spiegazione su due dichiarazioni che non riesco a capire; il linguaggio è il C
Prima:Seconda:Codice: Seleziona tutto
int *frog[5];Ciao e grazie!Codice: Seleziona tutto
int (*frog) [5];
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.
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


piano e calmaVonNeumann ha scritto:attenzione!!! (nono)simo_magic ha scritto:sono praticamente identiche, l'ho già detto!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)
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
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!!
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;
}
concordo in linea di massima, ma permettimi di dissentire dalla spiegazione!!!simo_magic ha scritto:piano e calmaVonNeumann ha scritto:attenzione!!! (nono)simo_magic ha scritto:sono praticamente identiche, l'ho già detto!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)
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
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!!
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![]()
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti