변수 : 변수가 사용될 수 있는 범위에 따라 지역변수, 전역변수로 나누어짐
지역변수 (local variable) : 블록 안에서만 정의되는 변수
- 해당 블록 안에서만 접근과 사용 가능
cf) 블록 : 중괄호로 둘러싸인 영역
- 블록이 시작할 때 스택(stack)이라는 메모리 공간에 만들어짐
- 지역 변수에 할당된 공간은 블록 끝에서 반환됨 -> 이때 지역 변수도 사라짐
- 지역변수는 반드시 초기화를 시켜주어야 함
- 지역 변수는 컴파일러에 의하여 자동으로 0으로 초기화 되지 않음
-> 초기값을 정해주지 않았다면 아무의미 없는 값(쓰레기값(garbage value))이 들어가 있음
< C언어와 C++언어에서의 지역변수 사용 차이>
C | 블록의 시작부분에서만 선언 가능( 중간에서는 선언 불가능) |
C++ | 블록의 어디에서든지 선언 가능 |
함수의 매개변수 : 함수의 헤더 부분에 정의 되어 있는 변수
- 일종의 지역변수 (지역변수가 지니는 모든 특징 갖고있음)
지역변수와 다른점 : 함수를 호출할 때 넣어주는 인자 값으로 초기화 되어있음
전역변수 (global variable) : 함수의 외부에서 선언되는 변수
- 해당 소스 파일의 어느 곳에서든 사용 가능(소스파일 전체)
- 전역변수를 초기화하지 않으면 컴파일러에 의해 0으로 초기화
- 전역변수는 프로그램 시작과 동시에 생성되어 프로그램이 종료 되기 전까지 메모리에 존재
- 전역변수는 블록 안에서만 사용하기에 부담이 있음
정적 지역 변수(static variable)
- 블록에서만 사용되지만 블록을 벗어나도 자동으로 제거 X
- 지역변수를 정적변수로 만듦 ( static 앞에 붙여서 사용)
- 프로그램이 시작할 때 메모리에 생성되고 프로그램 실행 종료 시 메모리에서 제거됨
- 정적변수는 이전값을 기억한다.
#include <iostream>
using namespace std;
void sub(void) {
int i = 0;
static int s = 0; //정적변수 선언
i++;
s++;
cout << "( " << i << " , " << s << " )" << endl;
}
int main(void) {
sub(); // (1,1)출력
sub(); // (1,2) 출력
sub(); //(1,3) 출력
return 0;
}
위의 예시를 보면
지역변수 i 는 sub()함수를 호출할 때마다 생성되고 호출이 끝나면 메모리에서 제거됨
정적 변수 s의 값은 한번 생성되면 함수의 호출이 끝나도 제거되지않기 때문에 이전의 값을 유지함
'Computer Science > Programming Language' 카테고리의 다른 글
[C++] 참조자(reference) (0) | 2020.06.13 |
---|---|
[C/C++] 동적 메모리 할당(dynamic memory allocation) (0) | 2020.06.12 |
[C++] 디폴트 매개변수 (default parameter) (0) | 2020.06.10 |
[JAVA] 데이터타입 - 참조 타입 (0) | 2020.06.04 |
[JAVA] break문 사용 (0) | 2020.06.01 |