PDA

View Full Version : [C]puntatoreApuntatore e arraydiPuntatori , problema


toni00t
04-05-2014, 18:58
ciao mi è venuto un dubbio veniale sui puntatori :
un array di puntatori dovrebbe essere equivalente a un puntatore a puntatore , eccetto
che quest'ultimo è read only :

ho provato ad accedere al loro contenuto , ma se nei primi due casi tutto funziona
nel terzo esempio ottengo sempre core dump : qualcuno mi può aiutare ?
non vorrei dire sciocchezze ,ma ho il sospetto che che compile-time e run-time centrino qualcosa..

SI

main(int argc , char **argv)
{
...
printf ("%s" , argv[1]) ;
}


SI

main(int argc , char *[]argv)
{
...
printf ("%s" , argv[1]) ;
}


NO

int main()
{
char **str="pippo";
printf ("%s" , str[1]) ;//coredump
printf ("%s" , *str) ;//core dump
}


grazie

toni00t
05-05-2014, 08:53
L'ultima definizione é char* str="pippo"

ciao , no, è un puntatore a puntatore a stringa.perchè dici?

lorenzo001
05-05-2014, 09:52
Vedi spiegazioni in

http://forum.html.it/forum/showthread.php?threadid=2908918

toni00t
05-05-2014, 11:24
Vedi spiegazioni in

http://forum.html.it/forum/showthread.php?threadid=2908918
ho letto quel mio post su html.it , ma ancora non capisco

lorenzo001
05-05-2014, 12:49
Cosa non capisci in particolare ?

Conosci la differenza tra un puntatore semplice e un puntatore a puntatore?

toni00t
05-05-2014, 13:52
Cosa non capisci in particolare ?

Conosci la differenza tra un puntatore semplice e un puntatore a puntatore?
si , un puntatore a puntatore è una variabile a cui è stata assegnata l'indirizzo di un altro puntatore come valore :
se
char *str="ciao"

punta a una stringa "ciao" , costante, da qualche parte della memoria,
perchè



char **str2="ciao"


non dovrebbe fare la stessa cosa , ma con una doppia indirezione?

lorenzo001
05-05-2014, 15:45
Un doppio puntatore è un puntatore che punta ad un puntatore che punta al dato. Quindi

**dstr -> *str -> "pippo"

Ma *str deve esistere, non puoi solamente immaginarlo. Quindi è corretto scrivere così

char *str = "ciao";
char **dstr = &str;