C++ 7. 변수
7. 변수
1. 지역(local) 변수
- 지역 변수는 함수의 내부에서 정의되고, 변수가 선언된 함수에서만 사용이 가능하다.
- 함수와 같이 스택 메모리 영역에 저장되므로 함수가 호출될 때 할당되고 종료되면 메모리 영역에서 해제된다.
- 대괄호{}로 구분된 다른 영역에 있을 경우 다른 변수로 취급된다.
#include <iostream>
int main()
{
int ilocal = 0;
{
int ilocal = 100; //앞의 변수 i와 메모리를 공유하지 않는다. (다른 변수이다.)
ilocal += 1;
}
return 0;
}
2. 전역(global) 변수
- 프로그램의 시작부터 할당되며, 프로그램이 종료될 때까지 존재한다.
- 데이터 메모리 영역에 저장된다.
- 함수의 호출과 종료와는 상관 없이 항상 존재하지만, 어떤 함수에서든지 접근이 가능하다.
#include <iostream>
int iglobal = 0;
void test()
{
iglobal = 20;
}
int main()
{
iglobal = 50; //50이 할당됨
test(); //test 함수에 의해 20이 할당됨
return 0;
}
3. 정적(static) 변수
- 데이터 메모리 영역에 저장된다.
- 처음 호출될 때 한번만 초기화된다. 이후의 호출에서는 선언 및 초기화 구문은 무시된다.
- 정적 변수는 선언된 위치에 따라 해당 위치에서만 호출이 가능한 “전용” 변수가 된다.
#include <iostream>
static int gStatic = 0;
void test()
{
gStatic = 20;
static int lStatic = 0; //0으로 초기화 (1회만 실행됨)
lStatic += 1;
}
int main()
{
test(); //0으로 초기화된 후 1이 증가하여 lStatic에는 1이 할당되어있다.
test(); //초기화되지 않고 1이 증가하여 lStatic에는 2가 할당되어있다.
return 0;
}
4. 외부(extern) 변수
- 외부 파일의 변수를 참조하기 위한 변수.
- 다른 파일의 전역 변수만을 참조 가능하며, 전방 선언 형태로 헤더 파일에 포함시킬 수 있다.
- 지역 변수는 휘발성이기에 참조가 불가능, 정적 변수는 해당 위치에서만 호출 가능하기에 참조 불가능.
extern int ext; //이 형태로 헤더 파일에 포함시켜 참조할 수 있다. (일반적인 전방 선언도 가능)