OK, tengo problemas para entender los punteros a los punteros frente a los punteros a las matrices. Considere el siguiente código:¿Por qué un puntero a un puntero es incompatible con un puntero a una matriz?
char s[] = "Hello, World";
char (*p1)[] = &s;
char **p2 = &s;
printf("%c\n", **p1); /* Works */
printf("%c\n", **p2); /* Segmentation fault */
¿Por qué la primera obra printf, mientras que el segundo no lo hace?
Por lo que entiendo, 's' es un puntero al primer elemento de la matriz (es decir, 'H'). Así que declarar p2 como char ** significa que es un puntero a un puntero a un char. Hacer que apunte a 's' debería ser legal, ya que 's' es un puntero a un char. Y, por lo tanto, desreferenciarlo (es decir, ** p2) debería dar 'H'. ¡Pero no es así!
Ninguna de las asignaciones de compilar en VC++ 2010. – Jon
Extraño. Funciona bien en GCC 4.4.4. – Meta
@Meta: No en GCC 4.3.4 ([demo] (http://ideone.com/K6D1D)) o 4.5.1 ([demo] (http://ideone.com/gTGhY)) ... – ildjarn