c에서 struct의 값을 간접적으로 설정하는 방법은 무엇입니까?
Aug 20 2020
포인터를 통해 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);
}
그러나 그것은 약간의 쓰레기를 인쇄합니다. 비슷한 방식으로 어떻게 설정할 수 있습니까?
답변
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
.