본문 바로가기

programming language/C 언어

지역변수와 전역변수

지역변수전역 변수는 각각  

1. 메모리상에 존재하는 기간

2. 변수에 접근할 수 있는 범위에서 차이점을 보인다.

 

지역변수에서 말하는 '지역'이란 중괄호에 의해 형성되는 영역을 뜻한다.

그러므로 중괄호 내에서 선언되는 변수는 모두 지역변수이다. 

그런데  이 지역변수는 선언된 지역 내에서만 유효하다는 특성이 있다.

그리고 지역 변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다.

 

지역변수는 해당 선언문이 실행될떄 메모리 공간에 할당되었다가, 선언문이 존재하는 함수가 반환을 하면(종료를 하면)

메모리 공간에서 소멸된다.

 

다음은 지역변수에 관한 예제이다.

주석처리

 

40행의 지역변수 num에 의해서 36행의 main함수의 지역변수 num이 if문내에서 가려졌다. 때문에 41행에서 접근하는 num은 36행의 num이 아닌 40행의 num이다.

반면에 40행의 변수선언이 없었다면(주석 처리 ) 41행에서 접근하는 num은 36행의 num이 된다.

 

추가적으로 함수를 정의할때 선언하는 매개변수도 지역변수의 일종이다. 따라서 매개 변수도 지역변수의 특성을 지닌다.

1. 선언된 함수 내에서만 접근이 가능하다.

2. 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸이 된다.

 

매개변수는 지역변수이다!라고 이야기해도 되지만 그 역은 안된다. 모든 지역변수가 매개 변수는 아니기 때문이다.

 

지역변수를 자동변수라고 부르기도 한다.

why? 선언된 영역을 벗어나면 자동으로 소멸되기 때문...