En el párrafo 18 de 6.7.2.1, la norma (borrador N1570) los describe:
Como caso especial, el último elemento de una estructura con más de un miembro con nombre puede tener un tipo de matriz incompleta; esto se denomina miembro de matriz flexible. En la mayoría de las situaciones, se ignora el miembro de matriz flexible. En particular, el tamaño de la estructura es como si se hubiera omitido el miembro de matriz flexible, excepto que puede tener más relleno final de lo que implicaría la omisión. Sin embargo, cuando un . (o ->) tiene un operando izquierdo que es (un puntero a) una estructura con un miembro de matriz flexible y el operando derecho nombra ese miembro, se comporta como si ese miembro fuera reemplazado con la matriz más larga (con el mismo tipo de elemento) que no hacer que la estructura sea más grande que el objeto al que se accede; el desplazamiento de la matriz seguirá siendo el del miembro de matriz flexible, incluso si esto fuera diferente al de la matriz de reemplazo. Si esta matriz no tuviera elementos, se comporta como si tuviera un elemento, pero el comportamiento no está definido si se intenta acceder a ese elemento o generar un puntero uno más allá.
Es un truco común de C declarar lo que se puede llamar una matriz de longitud variable (donde define el tamaño en el momento de la asignación
Ejemplo:
struct line {
int length;
char contents[0];
};
struct line *thisline = (struct line *)
malloc (sizeof (struct line) + this_length);
thisline->length = this_length;
De esta manera, tiene una definición de estructura de sus datos, que también almacena la longitud de la matriz por razones de conveniencia obvias, pero no está limitado por el tamaño fijo que generalmente se asocia con una estructura.
Ejemplo tomado de aquí (también más información allí)
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Creo que eso significa una matriz de longitud cero, creo que significa que está obteniendo o recuperando el primer valor de la matriz.
– Ryan Fung
31 de julio de 2012 a las 5:58
gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
– Neo
31 de julio de 2012 a las 5:59