es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Asignar una matriz 2D como miembro de una estructura.

Necesito crear una estructura con una matriz bool de 2D como miembro, así que lo hice con un puntero doble como se muestra a continuación. Ahora tengo un problema cada vez que intento asignar un objeto de matriz 2D a este miembro de estructura, recibo una advertencia de que el tipo de puntero no es compatible. ¿Hay alguna manera de asignarlo (no copiar porque no tengo un objeto solo un puntero doble como miembro de estructura)?

#include <stdlib.h> 
#include <stdbool.h> 
#include <stdint.h> 

typedef struct{
    bool **object;
} entry_t; 

bool testObject[3][6];

entry_t entry = {
    .object = testObject 
}; 

La advertencia recibida:
warning: initialization of '_Bool **' from incompatible pointer type '_Bool (*)[6]' [-Wincompatible-pointer-types]</stdint.h></stdbool.h></stdlib.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con esta definición de estructura es que espera un puntero doble a valores booleanos, pero la variable testObject que se está utilizando para la inicialización es una matriz 2D de valores booleanos. Por lo tanto, los dos tipos son incompatibles, lo que resulta en el mensaje de advertencia que se ve.

    Una solución podría ser asignar dinámicamente memoria para el miembro “object” de la estructura usando malloc(), y luego copiar manualmente los valores desde la variable testObject en esa memoria asignada. Otra opción sería cambiar la definición de la estructura para que coincida mejor con el tipo de la variable testObject, como usar un puntero regular a una matriz booleana 2D en lugar de un puntero doble.

Comments are closed.