Truco de estructura

¿Cuál será el tamaño de la siguiente estructura?
 

CPP

struct employee
{
    int     emp_id;
    int     name_len;
    char    name[0];
};

4 + 4 + 0 = 8 bytes.
¿Y qué pasa con el tamaño de «nombre [0]». En gcc, cuando creamos una array de longitud cero, se considera una array de tipo incompleto, por lo que gcc informa su tamaño como «0» bytes. Esta técnica se conoce como “Struct Hack”. Cuando creamos una array de longitud cero dentro de la estructura, debe ser (y solo) el último miembro de la estructura. En breve veremos cómo usarlo. 
La técnica «Struct Hack» se utiliza para crear miembros de longitud variable en una estructura. En la estructura anterior, la longitud de la string de «nombre» no es fija, por lo que podemos usar «nombre» como array de longitud variable.
Veamos a continuación la asignación de memoria.

CPP

struct employee
{
    int     emp_id;
    int        name_len;
    char    name[128]; /* character array of size 128 */
};

CPP

struct employee
{
    int        emp_id;
    int        name_len;
    char    name[1024]; /* character array of size 1024 */
};

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *