#include<stdio.h>

struct point
{
 int x;
 int y;
};

struct point* function(void);

int main(void)
{
 struct point* p;
 p=function();
 printf("%d %d\n",p->x,p->y);
 printf("%d %d\n",(*p).x,(*p).y);
 printf("%x\n",p);

 

return 0;

}

struct point* function(void)
{
 struct point call={10,20};
 printf("%x\n", &call);
 return &call;
}

 

이면 실행결과가

 

12fe7c

10 20

1245032 4264912

12fe7c

 

로 나오는데

 

stuct point* function이 끝나면 원래 local variable인 call의 메모리가 완전히 사라져야되자나요?

 

근데 위에 밑줄그은 부분에서

 

첫번째 printf는 10 20이 출력되는 반면

 

두번째에선 이상한 값이 나옵니다.

 

p->x와 (*p).x의 차이는 무엇인가요?

 

p->x,y는 p의 주소에서 +0,+1을 더한값 만큼 이동해서 출력하는식인가요?

 

그리고 struct point인 p가 fuction의 result 값을 반환받았을 때 sturct 변수의 멤버변수 수와 크기까지 같이 받는가요?