PROGRAMMING LANGUAGE/C
11강 변수의 존재기간과 접근범위
JC0
2021. 9. 15. 09:15
지역변수와 전역변수 그리고 정적변수에 대해서 알아보자.
#include <stdio.h>
int SimpleFuncOne(void)
{
int num = 10;
num++;
printf("SimpleFuncOne num: %d \n", num);
return 0;
}
int SimpleFuncTwo(void)
{
int num1 = 20;
int num2 = 30;
num1++, num2--;
printf("num1 & num2 : %d %d \n", num1, num2);
return 0;
}
int main(void)
{
int num = 17;
SimpleFuncOne();
SimpleFuncTwo();
printf("main num : %d \n", num);
return 0;
}
지역변수는 변수를 선언한 함수를 호출할 떄 메모리가 생성되고 함수를 종료할 때 메모리가 소멸된다.
지역변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같더라도 다른 변수로 인식한다.
#include <stdio.h>
void Add(int val);
int num;
int main(void)
{
printf("num: %d \n", num);
Add(3);
printf("num: %d \n", num);
num++;
printf("num: %d \n", num);
return 0;
}
void Add(int val)
{
num += val;
}
전역변수는 프로그램의 시작과 동시에 메모리 공간에 할당되고 프로그램 종료시까지 존재한다.
별도의 값으로 초기화하지 않으면 0으로 초기화된다.
프로그램 전체 영역 어디서든 접근이 가능하다는 특징을 가지고 있다.
#include <stdio.h>
void SimpleFunc(void)
{
static int num1 = 0;
int num2 = 0;
num1++, num2++;
printf("static: %d, local: %d \n", num1, num2);
}
int main(void)
{
int i;
for (i = 0; i < 3; i++)
SimpleFunc();
return 0;
}
static 변수를 알아보자. 정적변수의 특징은 선언된 함수 내에서만 접근이 가능한 지역변수의 특성과
초기화가 처음 한번만 되고 프로그램 종료시까지 메모리 공간에 존재하는 전역변수의 특성을 동시에 가지고 있다.
할당과 소멸은 전역변수와 같지만 함수내에서만 접근이 가능하기 떄문에 전역변수를 static변수로 바꿀 수 있다면 대체하여 프로그램의 안정성을 높이는 것이 좋다.