본문 바로가기
c++

13. 지역변수,전역변수,정적 지역 변수

by 래끼 2020. 1. 5.
728x90
반응형

C++에서 변수는 지역변수,전역변수,정적 지역 변수로 선언 될 수 있습니다.

변수의 범위는 참조될 수 있는 프로그램의 영역을 말하는 것입니다.

 

먼저

 함수안에서 정의된 변수를 지역변수 라고 합니다.

 모든 함수 외부에서 선언되어 파일 내 모든 함수에서 접근이 가능한 변수를 전역변수라고 합니다.

 

 

 

 

지역변수와 전역변수

 

 

위의 코드를 살펴보면서 지역변수와 전역변수에 대해 설명드릴게요.

4번째 줄에 int y;라고 선언된 부분이 보이시죠.

이렇게 함수 외부에서 선언되어 프로그램의 모든 함수에서 접근이 가능한 변수를 "전역 변수"라고 합니다.

즉, 변수 y는 전역변수인 상태입니다.

 

5번째 줄에 void형의 함수 T1을 선언해주었는데요.

함수 T1의 내용은 int x = 1;이라고 선언해주고 현재 x와 y값을 출력하고 x와 y값에 각각 1씩 더해주게됩니다.

 

13번째 줄에는 void형의 함수 T2를 선언해주었습니다.

함수 T2의 내용은 int x =1;이라고 선언해주고 현재 x와 y값을 출력하는 내용입니다.

 

함수 T1과 T2에서 int x =1;이라고 선언해주는 부분을 발견하셨나요?

변수 x는 지역변수로 해당 함수안에만 정의되어 있습니다.

 

 

그리고 main함수에서 21,22번째 줄처럼 T1()과 T2()를 호출하게 되면 다음과 같은 결과가 출력됩니다.

 

T1에서 변수 x는 1이라고 정의되고 출력된 후 x++라는 코드이후 T1에서의 x는 2가 됩니다.

하지만 T1에서의 x는 T1안에서만 정의된 x이기 때문에 T2의 x값에 영향을 줄 수 없습니다.

T1과 T2에서의 x는 각각 해당 함수의 지역변수이기 때문에 같은 이름을 가진 다른 변수입니다 : )

그러므로 여전히 T2에서 변수x의 값은 T2에서 "int x=1"로 선언됬던 그대로 1입니다.

 

변수 y의 경우 처음 int y; 의 형태로 선언되어 기본값 0으로 선언되어있습니다.

T1에서의 y값은 0으로 출력된 후에 y++코드를 통해 1이 됩니다.

y는 전역변수T1함수가 끝나고 T2함수가 시작되도 여전히 그 값이 유효합니다.

그러므로 T2에서도 y의 값은 1로 유효하여 y는 1이라고 출력됩니다.

 

 

 

 

 

 

 

정적 지역 변수

 

함수 실행이 끝나면 모든 지역변수는 메모리에서 사라지게되어 다음호출에서 지역변수를 다시 사용할 수 없습니다.

다음 호출에서도 지역변수를 다시 사용하기 위해 지역 변수에 저장된 값을 유지하고자 할때 정적지역변수를 사용하면 프로그램이 끝나고 난 후 까지 메모리에서 사라지지않고 계속 유지할 수 있습니다 : )

 

정적 지역 변수를 선언하려면 static 키워드를 사용하면 됩니다.

 

위의 프로그램에서 변수 x와 y모두 함수 T1에서 선언되어 지역함수이지만 x는 static int x =1; 정적지역변수로 선언됬습니다.

 

출력화면은 다음과 같습니다.

 

main함수에서 처음 T1함수를 호출했을 때는 x++,y++로 x와 y의 값이 모두 2가 됩니다.

 

그렇게 첫번째로 호출된 T1이 끝나고 두번째로 함수 T1이 호출될때 정적지역변수 x는 전의 메모리가 유지됩니다.

유지된 값 2에 x++로 3이 출력됩니다.

하지만 지역변수 y는 두번째 함수호출과 함께 메모리가 사라지게 되고 지역변수 y는 다시 1이 되고 y++로 2가되어 2가 출력됩니다.

 

728x90
반응형

댓글