¿Cómo inicializar un puntero a una estructura en C?

2 minutos de lectura

avatar de usuario
ENE

Dada esta estructura:

struct PipeShm
{
    int init;
    int flag;
    sem_t *mutex;
    char * ptr1;
    char * ptr2;
    int status1;
    int status2;
    int semaphoreFlag;

};

Eso funciona bien:

static struct PipeShm myPipe = { .init = 0 , .flag = FALSE , .mutex = NULL , 
        .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 = -10 , 
        .semaphoreFlag = FALSE };

Pero cuando declaro static struct PipeShm * myPipe eso no funciona, supongo que necesitaría inicializar con el operador ->¿pero cómo?

static struct PipeShm * myPipe = {.init = 0 , .flag = FALSE , .mutex = NULL , 
        .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 = -10 , 
        .semaphoreFlag = FALSE };

¿Es posible declarar un puntero a una estructura y usar la inicialización con él?

  • Debe asignar memoria al puntero para que pueda hacer algo significativo con él. Un puntero por sí solo apunta a una dirección aleatoria. Debe asegurarse de que la dirección a la que apunta el puntero sea lo suficientemente grande como para contener el contenido de la estructura.

    – Alok Guardar

    29 de julio de 2012 a las 14:19


  • No lo entiendo… ¿por qué necesitas un puntero ?

    –Karoly Horvath

    29 de julio de 2012 a las 14:21

  • Ver pregunta aquí Para declarar un puntero, debe asignar memoria, por lo que básicamente está preguntando lo mismo.

    – rudolf9

    29 de julio de 2012 a las 14:23

Esta bien, lo tengo :

static struct PipeShm  myPipeSt = {.init = 0 , .flag = FALSE , .mutex = NULL , .ptr1 = NULL , .ptr2 = NULL ,
        .status1 = -10 , .status2 = -10 , .semaphoreFlag = FALSE };

static struct PipeShm  * myPipe = &myPipeSt;

  • Este usa asignación de memoria dinámica, por lo tanto, no es tan elegante.

    – Matthias Dieter Wallnofer

    13 de febrero de 2019 a las 14:50

Primero debe asignar memoria para el puntero de la siguiente manera:

myPipe = malloc(sizeof(struct PipeShm));

Luego, debe asignar valores uno por uno como se muestra a continuación:

myPipe->init = 0;
myPipe->flag = FALSE;
....

Tenga en cuenta que para cada puntero individual dentro de la estructura, debe asignar memoria por separado.

avatar de usuario
oseikar

Primero inicialice la estructura (static struct PipeShm myPipe = {...). Luego toma la dirección

struct PipeShm * pMyPipe = &myPipe;

avatar de usuario
bromista

tienes que construir esa estructura a mano y luego hacer un puntero que apunte a eso.

o

static struct PipeShm myPipe ={};
static struct PipeShm *pmyPipe = &myPipe;

o

static struct PipeShm *myPipe = malloc();
myPipe->field = value;

¿Ha sido útil esta solución?

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
Privacidad