¿Cómo establecer el valor de la estructura indirectamente en c?
Me gustaría saber cómo acceder al primer miembro de la estructura a través del puntero. He intentado esto:
#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);
}
pero eso imprime algo de basura. ¿Cómo puedo configurarlo de manera similar?
Respuestas
La asignación debe ser:
*(int*)p = val;
Desea asignar a un int
miembro, por lo que el puntero debe ser un puntero a int
, no un puntero a int
. Y el valor que se asigna debe ser int
; &val
es un puntero a int
.
Lo que está haciendo allí es establecer el valor de p->a
en la dirección de val
(posiblemente truncado a 32 bits, según la implementación).
Para acceder al campo a través de un puntero, debe tomar la dirección del campo y luego asignarla al puntero desreferenciado.
int *pa = &p->a;
*pa = val;
Por supuesto, también puede escribir p->a = val
. Tenga en cuenta que p->a
es solo una abreviatura de (*p).a
.