앞서 우리는 변수에대해 뭐라고 설명했는가?
변수는 데이터의 값을 저장할수 있는 메모리공간이다.
변수는 선언되는 위치에 따라서 크게 '전역변수'와 '지역변수'로 나뉘어진다!
그리고 그 둘 변수의 차이는 이러하다
- 메모리에 존재하는 기간
- 변수에 접근할 수 있는 범위
두 차이점을 곰곰히 생각하며 이번 공부를 해보자!
이쯤에서 뭔가 생각이 생길것이다.
지역변수 ? 전역변수 ? 왜 두 변수의 이름이 저렇게 정의되었지?
지역? 전역? 왠지 아직 살펴보진 않았지만 어느정도 느낌이 온다. (오길 바래오........ 안와도 괜찮아오 앞으로 설명할꺼에오)
첫번쨰로 지역변수에 대해 설명하도록 하겠다. ( 진짜 너무도 중요한 부분!!!!!!!)
'지역변수'에서의 '지역'은 말 그대로 일정하게 구획된 어느 범위를 말한다.
즉 , 여기 C언어에서는 중괄호에 의해 형성되는 영역을 말한다.
따라서 , 중괄호 내에 선언된 변수는 모두 지역변수이다.
이러한 지역변수는 선언된 지역 내에서만 유효하다는 특성을 가진다!
이러한 특성을 예제를통해 이해해보자!
4행에서 localone이라는 함수를 선언 및 정의하였고 함수 내부에 num이라는 지역변수를 선언하였다.
그리고 바로 21행을 보자 , 21행부터 main함수를 정의하도 내부에 num이라는 지역변수를 선언하였다.
localone함수의 지역변수와 main함수의 지역변수명이 같다.
우리는 앞서 변수에대해 공부할때 이름이 같은 변수는 하나만 사용이 가능하다고 배웠다.
결과가 궁금하니 일단 이 코드를 실행시켜보도록 하자!
우리가 예상했던 바와는 달리 오류없이 컴파일이 진행되었다.
여기서 지역변수의 특성을 알수있다!
이번엔 처음부터 코드의 흐름을 살펴보며 분석해보자!
4행에서 localone이라는 함수를 정의 시작하여 함수를 호출하면 num이라는 지역변수에 10을 저장시키고 num++ 후 printf를 하도록 정의하였다.
12행에서는 localtwo라는 함수를 정의 시작하여 함수 호출시 num1지역변수에는 20 , num2지역변수에는 30을 저장시키고 num1++ , num2--이후 num1과 num2를 출력하도록 하였다.
21행에서 main함수를 열고 지역변수 num에 17을 저장시키고 , localone함수와 localtwo함수를 호출하였다.
여기서의 흐름이 정말 중요하다!
main함수 시작 -> (23행) main함수 지역변수 num에 17저장 -> (24행)localone함수 호출 ->(4행)localone함수로 이동 후 함수 실행 -> 함수 실행 완료 후 25행으로 복귀 -> (25행)localtwo함수 호출 -> (12행)localtwo함수로 이동 후 함수 실행 -> 함수 실행 완료 후 26행으로 복귀
-> printf함수 실행 -> return 0;
이 흐름을 꼭 이해하도록 하자! main함수에서 다른 함수를 호출하게 되면 그 호출된 함수로 잠시 이동하여 함수 실행후 다시 main으로 돌아오는 흐름을 띈다.
지역변수들은 함수 내에 선언되서 코드의 흐름이 그 함수를 벗어나면 벗어남과 동시에 자동으로 소멸된다.
그렇기 때문에 각각의 지역변수들은 정말 각각의 지역변수일 뿐이다 .
지역변수의 특징을 정리하겠다.
지역변수(Local Variable)의 특징 : 1) 선언된 함수 내에서만 존재 ( 해당지역을 벗어나면 자동 소멸 , 따라서 선언된 지역이 다르면 이름이 같아도 전혀 문제 X)
2) 지역변수는 선언과 동시에 '스택(stack)'이라는 메모리 영역에 할당된다.
(함수가 종료될때 까지만 존재)
어느정도 지역변수에 대하여 감이 잡혔다면 이번엔 반복문에 지역변수를 활용해보자!
코드의 흐름을 분석하고 이해한 후 , 결과값을 예상해보자!
main함수 내에 반복문에 이용할 변수 cnt를 선언했고 num이라는 지역변수에 5를 저장했군
그 다음 for문 내에 num이라는 지역변수를 0으로 초기화하고 반복을 시작하면서 반복횟수와 for문 내 지역변수 num의 값을 출력하네
for문이 종료되고나서 main함수의 지역변수 num을 출력하고 함수가 종료되는구나
결과값을 보자.
예상했던대로 결과값이 출력되었음을 확인하였다!
'Programming > C Language' 카테고리의 다른 글
static 변수 (static variable) (0) | 2017.10.31 |
---|---|
전역 변수 (Global Variable) (0) | 2017.10.31 |
함수 정리 (1) | 2017.10.30 |
if 문 그리고 else (0) | 2017.10.30 |
For 문 ? (0) | 2017.10.30 |