Come impostare il valore di struct indirettamente in c?
Vorrei sapere come accedere al primo membro di struct tramite pointer. Ho provato questo:
#include <stdio.h>
#include <stdlib.h>
struct foo
{
int a;
char *str;
};
int main()
{
struct foo *p = malloc(sizeof(struct foo));
int val = 10;
*(int**)p = &val; //set the value of the first member of struct foo
printf("%i\n",p->a);
}
ma questo stampa un po 'di spazzatura. Come posso impostarlo in modo simile?
Risposte
L'assegnazione dovrebbe essere:
*(int*)p = val;
Si desidera assegnare a un int
membro, quindi il puntatore deve essere un puntatore a int
, non un puntatore a puntatore a int
. E il valore che viene assegnato deve essere int
; &val
è un puntatore a int
.
Quello che stai facendo lì è impostare il valore di p->a
all'indirizzo di val
(eventualmente troncato a 32 bit, a seconda dell'implementazione).
Per accedere al campo tramite un puntatore, è necessario prendere l'indirizzo del campo e quindi assegnarlo al puntatore senza riferimenti.
int *pa = &p->a;
*pa = val;
Ovviamente puoi anche scrivere p->a = val
. Nota che p->a
è solo un'abbreviazione di (*p).a
.