如何在c中间接设置struct的值?

How to set value of struct indirectly in 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.

的缩写