Ciao a tutti!
Siccome presto avrò un esame sul C, guardavo i vecchi compiti e ho trovato una tipologia d'esercizio che mi dà qualche problema. Vi scrivo qui sotto due testi di quel tipo, se possibile potreste aiutarmi a capire come si arriva a quei risultati?

1)
Cosa stampa il seguente programma:
codice:
main()
{
char *names[]={ "Ron", "Fred", "George",
"Ginny", "Arthur", "Molly"};
char **a, **b, *c;
a=names;
b=a++;
c=*(++b);
printf( "Prima stampa: %s\n", c+2 );
printf( "Seconda stampa: %s\n", c=b[3]+1 );
printf( "Terza stamnpa: %s\n", b[(b-a)+2]);
}
Prima stampa: ed
Seconda stampa: rthur
Terza stamnpa: Ginny

2)Cosa stampa il seguente programma:
codice:
#include <stdio.h>
main()
{
char *citta[]={Parigi, Londra, Amsterdam, Torino,
Milano, Roma, Stoccolma};
char **a, *b;
int i=3;
a=&citta[i--];
b=a[1]+i;
printf( Prima stampa: %s\n, b);
printf( Seconda stampa: %s\n, *++a);
b=a[--i]+3;
printf( Terza stampa: %s\n, b );
}
Prima stampa: lano
Seconda stampa: Milano
Terza stampa: a



La cosa che non mi è del tutto chiara è come mai a volte il puntatore (o puntatore di puntatore) punta ad un carattere o all'elemento successivo!

Grazie in anticipo!