c언어 프로그램 다양한 형식의 지역변수
■ 지난 글에서 지역변수의 개념을 정리해봤었는데요. 이번에는 좀 더 다양한 몇 가지 Local Variable에 대해서 알아보겠습니다. 개념 정리하면서 지역변수는 중괄호{}안에 선언되는 변수라고 했습니다. 그런데 이 중괄호는 함수에서만 사용되는 게 아니고 if 문이나 for 문처럼 제어문에서도 사용되는데요. 이런 제어문 안에 선언된 변수도 지역변수입니다. 그래서 괄호 시작 시점에서 메모리에 할당되며 중괄호가 끝날 때(제어문 빠져나오는 시점) 메모리에서 소멸하게 되는데요. 다음 코드를 보겠습니다.
▲ 어떤 값들이 출력될지 대충 예상되는 간단한 for 문인데요. 일단 프로그램을 실행부터 해보겠습니다.
▲ 예상했던 결과가 출력됐나요? for 문은 5번 반복되는 게 맞는데... 왜 계속 x의 값이 '1'이 출력되는지 아시겠나요? 지역변수를 확실히 이해하고 계시면 간단한 내용이죠.
■ 프로그램의 실행 순서를 간단하게 정리하자면 for 문이 실행돼서 중괄호를 지나면서 x는 메모리에 0으로 초기화됩니다. 그리고 x++로 1이 증가하게 되고 출력되는 x의 값은 1이 됩니다. 그렇게 값을 출력하고 첫번째 for 문이 종료되면서 중괄호를 빠져나가게 되죠. 이 순간 지역변수인 x는 메모리에서 소멸합니다. 그리고 두 번째 실행되면서 다시 메모리에 0으로 할당됩니다. 역시 for문을 실행하면서 1이 증가해서 출력되고 반복문을 빠져나가면서 다시 소멸하는 과정을 계속 반복하기 때문에 x의 값은 계속 1만 출력되는 것입니다.
이처럼 제어문에서 사용하는 변수들도 지역변수의 특징을 갖고 있는 걸 확인해봤고요. 다음은 지역변수의 특징 중에서 외부에 선언된 동일한 이름의 변수를 가리키는 특성에 대해서 알아볼게요. 이 역시 예제를 보면서 확인하겠습니다.
▲ 두 개의 x를 각각 main() 함수와 if 문에 선언하고 있는데요. if 문 안에서 x의 값을 출력하면... 당연히 그 안에 있는 20이 출력됩니다. 그리고 if 문 밖에서 x 값을 출력하면 main() 함수에 선언된 10이 출력되겠죠? 확인해보겠습니다.
▲ 실행결과에서 보듯이 각각의 x 값을 출력하게 됩니다. 이때 만약에 if 문 안에 x 변수가 없다면 어떤 값을 출력하게 될까요?
▲ 확인하기 위해서 변수를 주석처리 했습니다. 첫 번째 출력되는 x의 값은 얼마가 될까요? 여기서 또 지역변수의 특징 중의 또 하나를 확인할 수 있는데요. 이렇게 중괄호 안에 해당 변수가 없다면 바깥쪽에 있는 같은 이름의 변수를 가리키게 됩니다. 그래서 두 개의 x 모두 바깥에 있는 변수 x=10을 출력하게 됩니다. 확인해보고 마무리할게요.^^
이렇게 해서 제어문에서 사용되는 변수도 지역변수라는 걸 확인해봤습니다. 수고하셨어요.