Come impostare il valore di struct indirettamente in c?

Aug 20 2020

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

Barmar Aug 20 2020 at 23:57

L'assegnazione dovrebbe essere:

*(int*)p = val;

Si desidera assegnare a un intmembro, 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.

3 MatthiasBerndt Aug 21 2020 at 00:01

Quello che stai facendo lì è impostare il valore di p->aall'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.