问题描述
我想知道如何通过指针访问struct的第一个成员。我已经尝试过了:
#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);
}
但是会打印一些垃圾。如何以类似方式设置它?
解决方法
您在这里所做的就是将p->a
的值设置为val
的地址(可能会被截断为32位,具体取决于实现方式)。
要通过指针访问该字段,必须获取该字段的地址,然后分配给已取消引用的指针。
int *pa = &p->a;
*pa = val;
当然,您也可以只写p->a = val
。请注意,p->a
只是(*p).a
的缩写。
作业应为:
*(int*)p = val;
您要分配给int
成员,因此该指针必须是指向int
的指针,而不是指向int
的指针。并且分配的值必须为int
; &val
是指向int
的指针。