Uso de la sintaxis de inicialización de estructura para estructura en montón

Tengo esta estructura simple que quiero inicializar en el montón y volver como un puntero en una función.

struct entry {
    const char* const key; // We don't want the key modified in any way
    const void* data;      // But the pointer to data can change
    struct entry* next;
};

Hay un problema, no puedocalloc e inicializar miembros uno por uno porquekey es un puntero constante. Encontré en alguna parte esta sintaxis que funciona:

struct entry* entry = calloc(1, sizeof(struct entry));
*entry = (struct entry) { .key = key, .data = data, .next = NULL };

Pero no sé qué está sucediendo con eso: ¿crea una estructura "anónima" que luego se copia en el lugar donde*entry ¿vive? ¿Es seguro usarlo o debería preferir crear una estructura local que luego se copie conmemcpy a la ubicación correcta?

Respuestas a la pregunta(2)

Su respuesta a la pregunta