L' ho corretto considerando anche l' indentazione, che era un casino:
codice:
int main(void)
{
char *P[] = {"gennaio", "febbraio","marzo", "aprile", "", ""};
char *A ;
char **B;
char * E [5] ;
A = P[3] ;
B = &A ;
E[0] = B ;
printf("%s\n", A);
printf("%s\n", *E[0]);
return 0;
}
Se P si trova all' indirizzo mille, ciò non ha nessun legame con le stringhe che si trovano in P[0],...,P[5].
Se la stringa P[0] si trova all' indirizzo 2000 nell' area di sola lettura, P contiene l'indirizzo 2000 come valore, ma il puntatore non è memorizzato all' indirizzo 2000.
Deferenziando E[0], che contiene l' indirizzo in cui è contenuto il puntatore che punta alla stringa P[3], ottieni proprio l' indirizzo della stringa P[3].