Как установить значение структуры косвенно в c?

Aug 20 2020

Я хотел бы знать, как получить доступ к первому члену структуры через указатель. Я пробовал это:

#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);
}

а вот печатать фигня какая то. Как я могу установить его аналогичным образом?

Ответы

Barmar Aug 20 2020 at 23:57

Задание должно быть:

*(int*)p = val;

Вы хотите назначить intчлену, поэтому указатель должен быть указателем int, а не указателем на указатель int. И присваиваемое значение должно быть int; &valэто указатель на int.

3 MatthiasBerndt Aug 21 2020 at 00:01

То, что вы делаете там, - это установка значения p->aна адрес val(возможно, усеченный до 32 бит, в зависимости от реализации).

Чтобы получить доступ к полю через указатель, вы должны взять адрес поля и затем назначить его разыменованному указателю.

int *pa = &p->a;
*pa = val;

Конечно, вы также можете просто написать p->a = val. Обратите внимание, что p->aэто просто сокращение от (*p).a.