如何在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
.
的缩写
我想知道如何通过指针访问结构的第一个成员。我试过这个:
#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
.