OK, ho problemi a capire i puntatori ai puntatori rispetto ai puntatori agli array. Si consideri il seguente codice:Perché un puntatore a un puntatore non è compatibile con un puntatore a un array?
char s[] = "Hello, World";
char (*p1)[] = &s;
char **p2 = &s;
printf("%c\n", **p1); /* Works */
printf("%c\n", **p2); /* Segmentation fault */
Perché il primo lavoro printf, mentre il secondo non lo fa?
Da quello che ho capito, 's' è un puntatore al primo elemento dell'array (cioè 'H'). Quindi dichiarare p2 come char ** significa che è un puntatore a un puntatore a un carattere. Farlo puntare a "s" dovrebbe essere legale, poiché "s" è un puntatore a un carattere. E quindi dereferenziarlo (cioè ** p2) dovrebbe dare "H". Ma non è così!
Nessuna delle assegnazioni compila il VC++ 2010. – Jon
Strano. Funziona perfettamente con GCC 4.4.4. – Meta
@Meta: non su GCC 4.3.4 ([demo] (http://ideone.com/K6D1D)) o 4.5.1 ([demo] (http://ideone.com/gTGhY)) ... – ildjarn