변수
전역변수? 지역변수?
변수는 위치에 따라 사용범위 수명, 우선순위가 달라진다.
함수 밖에 위치하는 변수를 전역변수, 함수 안에 위치하는 변수를 지역변수라 한다.
전역변수는 어떤 함수에서든 쓰이며 지역변수는 그 함수에서만 쓸 수 있다.
#include <stdio.h>
int globalVariable; //전역변수
int main(int argc, char** argv)
{
int localVariable = 0; //지역변수
printf("전역변수 = %d\n", globalVariable);
printf("지역변수 = %d\n", localVariable);
return 0;
}
※전역변수는 초기화하지 않아도 0으로 자동 초기화된다. 하지만 왠만하면 초기화 하는것을 추천한다.
변수의 수명
전역변수는 프로그램이 끝날때까지 존재하지만 지역변수는 그 함수가 끝날때까지만 존재하다 사라진다.
#include <stdio.h>
int globalVariable = 0;
void counter();
int main(int argc, char** argv)
{
int localVariable = 0;
counter();
counter();
counter();
return 0;
}
void counter()
{
int count=0;
printf("함수를 호출한 횟수 : %d\n", count);
count = count+1;
}
※count의 값이 호출할때마다 0인것을 볼 수 있다.
정적변수(static variable)
함수가 끝날때마다 변수가 사라지는데 그걸 방지하는 방법이 있다.
지역변수 앞에 static를 놓아두면 변수가 사라지지 않아 값이 유지된다.
#include <stdio.h>
int globalVariable = 0;
void counter();
int main(int argc, char** argv)
{
int localVariable = 0;
counter();
counter();
counter();
return 0;
}
void counter()
{
static int count=0;
printf("함수를 호출한 횟수 : %d\n", count);
count = count+1;
}
변수의 우선순위
변수가 우선순위가 필요한가 라는 의문이 들겠지만 전역변수와 지역변수의 이름이 같을때 문제가 생긴다.
그렇기 때문에 같은 이름의 변수를 호출햇을때 컴파일러는 지역변수를 호출한다.
#include <stdio.h>
int Variable = 50;
int main(int argc, char** argv)
{
int Variable = 10;
printf("결과 : %d\n", Variable);
return 0;
}
※변수이름을 같게 하면 실수하는 경우가 생기기 때문에 변수이름을 다르게 하는것을 추천한다.
1) 전역, 지역, 정적 변수를 설명하시오
2) 전역 변수와 지역변수의 이름이 같을때 전역 변수를 쓰는 방법은?