
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?
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;
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.

oseikar
Primero inicialice la estructura (static struct PipeShm myPipe = {...
). Luego toma la dirección
struct PipeShm * pMyPipe = &myPipe;

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;
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