EDITAR: aparentemente algo de esto no está permitido/ha cambiado en varios estándares de C. Para mi propio beneficio hipotético, imaginemos que estamos usando gcc test.c
sin opciones estándar ni de advertencia.matrices de longitud cero frente a punteros
En particular estoy viendo los detalles debajo del capó. He agregado mi comprensión actual. ¿Estoy en lo cierto?
char **c1; //Size for a pointer is allocated on the stack. sizeof(c1) == sizeof(void*)
char *c2[0]; //Nothing is allocated on the stack. sizeof(c2) == 0
¿Hay alguna otra diferencia entre estos dos casos que no conozco (además de sizeof)?
struct a {
int i;
char c[0]; //sizeof(a) is sizeof(int)? a.c == (&i)+1?
};
Según tengo entendido, esto se suele utilizar para las matrices de longitud variable al final de las estructuras. Pero ¿qué pasa con
struct b {
char *c[0] //sizeof(b) is 0? where does c point?
};
int j;
struct b myb; //myb.c == (&j)+1 == $esp?
Además, ¿cómo está la dirección de una matriz de longitud cero si el espacio conocido por su puntero nunca se asigna a ninguna parte? Supongo que de la misma forma en que se conoce la dirección de un conjunto regular, pero estoy luchando por resolverlo en este momento.
Ver también [aquí] (http://stackoverflow.com/a/14643530/912144). – Shahbaz