Как установить значение структуры косвенно в c?
Я хотел бы знать, как получить доступ к первому члену структуры через указатель. Я пробовал это:
#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);
}
а вот печатать фигня какая то. Как я могу установить его аналогичным образом?
Ответы
Задание должно быть:
*(int*)p = val;
Вы хотите назначить int
члену, поэтому указатель должен быть указателем int
, а не указателем на указатель int
. И присваиваемое значение должно быть int
; &val
это указатель на int
.
То, что вы делаете там, - это установка значения p->a
на адрес val
(возможно, усеченный до 32 бит, в зависимости от реализации).
Чтобы получить доступ к полю через указатель, вы должны взять адрес поля и затем назначить его разыменованному указателю.
int *pa = &p->a;
*pa = val;
Конечно, вы также можете просто написать p->a = val
. Обратите внимание, что p->a
это просто сокращение от (*p).a
.