지역변수
함수 내부에 선언하는 변수를 말합니다.
전역변수
함수 바깥에 선언하는 변수를 말합니다.
스코프
변수를 사용할 수 있는 범위를 말합니다.
지역변수는 함수안에서만 사용가능합니다.
전역변수는 프로그램내 전체에서 사용가능합니다.
변수의 이름이 겹치는 경우
1. 지역변수끼리 겹치는 경우
지역변수끼리는 겹쳐도 괜찮습니다.
2. 전역변수와 겹치는 경우
전역변수와 겹쳐도 괜찮으나, 변수를 사용했을 때 지역변수가 우선 사용됩니다. 만약 전역변수를 사용하려면 변수앞에 ::(범위 해결 연산자)를 사용하면 됩니다.
메모리 할당(확보)
변수 등을 선언할 때 메모리에 공간이 생기는 것을 말합니다.
메모리 해제
변수의 사용이 끝나고 메모리를 다시 반환하는 것을 말합니다.
기억수명
메모리가 확보되고, 해제될 때까지의 기간을 말합니다.
지역변수의 경우, 함수가 실행될 때 할당되어 종료될 때 해제됩니다.
전역변수는 프로그램 시작부터 종료까지 유지됩니다.
static(기억클래스 지정자)
변수 앞에 static을 사용하면 지역변수의 기억수명을 함수 종료시까지가 아닌 전연변수처럼 프로그램 시작부터 끝까지로 만들 수 있습니다.
일반 지역변수로 선언한 변수는 함수가 종료될 때마다 해제되고 다시 선언되지만, static으로 선언한 변수의 값은 그대로 유지됩니다. 두번째로 프로그램이 다시 실행될 때 a=5라고 쓰여있지만 사실은 이전에 1이 더해진 값이 대입되어 있기 때문에 6인 상태입니다. 그래서 6에 1이 더해진 7이 됩니다.
만약 static으로 선언된 변수를 다른 함수에서도 전역변수처럼 이용할 수 있을까요?
아마 전역변수와 같은 수명을 가지게 되었지만, 어디까지나 함수안에 정의된 변수인 만큼 다른 함수에서 이용은 하기 어려울 것으로 예상합니다.
예상했던대로 다른 함수에서 선언한 static변수는 사라지지는 않아도 전역변수처럼 사용할 수는 없습니다.
지역 변수를 가리키는 포인터를 리턴할 시 주의할 점
지역변수를 포인터에 저장해서 리턴하면 함수가 끝남과 동시에 메모리가 해제되어 의미없는 값이 저장되기 때문에 주의해야 합니다. 이를 방지하려면 지역변수에 static을 붙여 사용합니다.
'C++' 카테고리의 다른 글
[13] 파일 분할 (0) | 2021.05.01 |
---|---|
[12] 동적 메모리 확보 (0) | 2021.05.01 |
[10] 배열 (0) | 2021.04.30 |
[9] 레퍼런스와 인수(그리고 다수의 포인터 선언) (0) | 2021.04.29 |
[8] 기본인수 (0) | 2021.04.29 |