#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 변수의 멤버변수 수와 크기까지 같이 받는가요?
p->x와 (*p).x의 차이는 없습니다.
http://ideone.com/56Ngdd
저랑 결과가 다른가요..?
C언어의 특성을 생각해볼 것. 스택.
뮬근// 스택?? 자료구조에 나오는건가요? 제가 아직 C문법 보고 있는 수준이어서... 찾아볼게요 감사합니다
ㅇㅇ// 전 c++2010express를 쓰고 있는데 위와같은 출력결과가 나오네요. 신기하게도 두번째 %d에서 10 20이 나오는군요 ㄷㄷ;;
function함수의 Point구조체 call이 스택에 쌓이고 결과값 리턴하면서 스택에서 빠지는데 이러면서 오류 생긴거 같네요. 그냥 call을 동적 할당하면 이상없을듯