#include <stdio.h>
#include <stdlib.h>

void foo(int **a)
{
 int u=70;
 *a = &u;
 printf(\"u\'s value : %d\\n\",**a); -> (1)
}
int main()
{
 int *b;
 foo((int **)&b);
 
 printf(\"after foo value : %d \\n\",*b); -> (2)

}
- 환경 : vc++6.0, 윈도우7

 위 소스코드에서,  (1)을 주석처리 할 경우랑 주석처리 하지 않았을 경우 (2)이 화면에 출력되는 값이 다르게 나옴.ㅠㅠ

 (1) 주석 처리 하지 않을 경우 화면 출력값은


 

 u\'s value : 70

after foo value : 4241497

(1) 주석처리 하였을 경우 화면 출력 값은

after foo value : 70


 

이렇게 나오는데.. 왜 이런거지..?? **a 이게 하나의 연산을 수행하는건가..??

왜 이렇게 값이 바껴서 나오는걸까.. 그리고 한가지 더 궁금한게 있다면,  스택영역에 할당 된 변수를 이중포인터가로 캐스팅해서 가르키는데,

함수 호출 끝나면 지역변수가 스택에서 다시 해제 될텐데, (1)주석 처리 했을 경우에 함수에 선언된 지역변수의 값을  가지는 건 어떻게 가지는건지

궁금함.ㅠㅠ 답변 부탁용~~