눈으로 하는 코딩이 아닌! 직접 타이핑하는 코딩은 실력 향상에 엄청난 도움이 됩니다.
안녕하세요~! 정선생이예요. 이번에는 함수 이후에 다뤘어야했던 변수의 유효범위를 알아볼거예요.
제가 작성한 줄 알고 넘어가는 바람에 게시글 순서가 살짝 꼬였네요.. 죄송합니다 ( __ )
일단 이 글은 배열 전에 읽어주시기를 바라고 함수 - 재귀함수 게시글을 보신 후에 보시는 것을 추천드립니다.
변수에 대해서는 두가지 종류가 있어요. 전역 변수와 지역 변수.
함수 외부에 변수를 정의 한 것은 전역 변수, 함수 내부에 변수를 정의 한 것은 지역 변수라고 해요.
글로는 주절주절 쓴 것 밖에 안되니까 바로 예제를 확인해보죠.
#include <stdio.h> int x = 20; int main() { printf("main block에서의 현재 x의 값 => %d\n", x); if(true){ int x = 5; printf("if block에서의 x의 값 => %d\n", x); } int x = 10; printf("main block에서의 현재 x의 값 => %d\n", x); return 0; }
결과값을 보시기 전에 미리 예측 해보고 하시는걸 추천합니다.
결과값을 보셨나요? ' 컴파일러는 각 블록에 있는 변수를 우선적으로 쓰게 된다. '
음.. 말이 어렵나요? 어떠한 변수를 쓰게되면 자신의 블록을 최우선으로 먼저 봅니다. 그런데 자신의 블록에 해당 변수가 없다면 그 상위 블록으로 나가서 확인을 해요.
2번째 줄의 int x = 20; 이 전역변수예요.
전역 변수와 지역 변수 차이점 중 하나가 지역 변수는 처음에 초기화를 해주지 않는다면 쓰레기 값이 생기는 반면, 전역 변수는 처음에 초기화를 해주지 않는다면 보통 0으로 자동 초기화가 됩니다.
int x = 20; 을 int x; 로 바꾸고 실행해보세요.
그리고 다음 예제를 봐보죠.
#include <stdio.h> int main() { if(true){ int x = 5; printf("if block에서의 x의 값 => %d\n", x); } printf("main block에서의 현재 x의 값 => %d\n", x); return 0; }
아마 printf("main block~~") 줄이 에러가 날꺼예요. 왜냐면 현재 블록에서는 x가 없고, 그 상위 블록에도 x가 없으니까요.
" 아! 지역 변수가 해당 블록을 떠나면 사용 할 수 없구나. "
이해 되시나요?ㅎ
'Programming > C' 카테고리의 다른 글
[C] 배열(Array) (0) | 2018.05.24 |
---|---|
[C] 재귀함수(Recursion) (0) | 2018.05.22 |
[C] 함수 (0) | 2018.05.15 |
[C] 반복문 (0) | 2018.05.06 |
[C] 조건문 (0) | 2018.05.04 |