C,C++

[C++]객체지향프로그래밍_변수의 범위

Acdong 2019. 5. 21. 00:50
728x90

변수의 범위


변수는 선언되는 위치에 따라서 '전역변수' 와 '지역변수'로 나뉜다.


 - 메모리상에 존재하는 기간

 - 변수에 접근할 수 있는 범위


지역변수


'지역'이란 중괄호에 의해 형성되는 영역을 뜻한다. 중괄호 내에 선언되는 변수는 모두 지역변수이다.


  •  초기화하지 않으면 불필요한 값을 갖는다.
  •  함수를 호출할 때마다 변수는 초기화된다.
  •  지역변수는 해당 지역을 벗어나면 자동으로 소멸된다.
  •  지역변수는 선언된 지역 내에서만 유효하므로 선언된 지역이 다르면 이름이 같아도 된다.
지역변수는 해당 선언문이 실행될 때 메모리 공간에 할당되었다가. 선언문이 존재하는 함수가 반환을 하면 메모리 공간에서 소멸된다.

매개변수


함수를 정의할 때 선언하는 매개변수도 지역변수의 일종이다.

 - 선언된 함수 내에서만 접근 가능하다.
 - 선언된 함수가 반환되면, 지역변수와 마찬가지로 소멸이 된다.

전역변수


전역변수는 함수 밖에서 선언한 변수이다.

  • 전역변수의 유효범위는 선언된 위치부터 프로그램 끝까지이다.
  • 전역변수는 초기화하지 않아도 자동으로 0으로 초기화된다.
  • 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재한다.
  • 프로그램 전체 영역 어디에서든 접근이 가능하다.
  • 전역변수와 동일한 이름의 지역변수가 선언되면 해당 블록 내에서는 전역변수가 가려지고,
    지역변수로의 접근이 이루어진다.

정적변수(static)


지역변수에 static 을 붙이면 선언된 함수 내에서만 접근이 가능하다.
한 번만 초기화되고 프로그램 종료시까지 메모리 공간에 존재한다.

void Simple()
{
static int num1 = 0;
int num2 = 0;
num1 ++; num2++;
cout << "static : " << num1 << "local : " << num2 << endl;
}

int main()
{
int i;
for( i = 0; i < 3; i++ )
simple();
return 0;
}

result :

 static : 1  local : 1 
 static : 2  local : 1
 static : 3  local : 1


재귀함수


함수 내에서 자기 자신을 다시 호출하는 함수


void Recursive(int num)

{

if (num <=0)

return;

cout << “Recursive call : ” << num << endl;

Recursive(num-1);

}


int main()

{

Recursive(3);

return 0;

}


재귀함수의 호출과정


재귀함수의 디자인


재귀함수는 자료구조나 알고리즘의 어려운 문제를 단순화하는데 사용됨



반응형