본문 바로가기
C

20201103#(8) 지역변수와 메모리 구조?

by zho 2020. 11. 3.

main 함수에 int c가 선언되었고, func1과 func2에도 c가 선언되었다.

그러면 위 c가 들어가있는 메모리의 주솟값은 같을까? 다를까?

 

결과는 main함수와 func함수들과의 주소값 달랐으며 func1의 c와 func2의 c 값의 주소값은 같았다.

왜 이러한 결과가 나온것일까?

 

main함수가 실행되고 지역변수 c가 선언되면서 c의 주소도 생겼다. 이후 func1 함수가 실행되고, 지역변수 c가 선언되면서 main함수에 있는 c와 다른 (이름만 같고 다른 변수임 )주소 값을 가진다. 그런데 왜 func2는 func1과 주소가 같을까? 지역변수로 선언하기 때문에 main과 func1의 c값이 다른 것처럼 func1과 func2도 다르지 않을까?라는 의문이 들 수도 있다.

하지만 func1이 실행을 마치고 func2가 실행되기 전에 func1에 있는 지역변수인 c는 pop 되기 때문에 사라진다. 그리고 func2가 선언되는데, 그 자리에 변수 c가 들어가지 않을까 생각된다.

 

맞나요?

728x90