지역변수
지역안에서 선언된 변수

범위 Scope
- 어디까지 적용되는가?
지속기간 Duration
- 메모리에 언제까지 적재되는가?


{}으로 지역을 구분한다. 

{}블록안에서 선언된 변수는 {}블록에서만 사용가능하다.
같은 블록안에서는 같은이름으로 변수를 선언하면 에러가 난다.
하지만 {{}}내부블록 안에서는 같은이름의 변수가 선언이 가능하다.
내부블록에서는 밖에 선언된 같은이름의 함수는 숨기고
내부블록안에 선언된 변수를 사용한다.

함수도 같은 이름은 불가능 하다.
하지만 파라미터가 다르다면 다른 함수로 볼 수 있다.

같은 이름의 함수를 사용하지 않는것이 좋지만
만약에 사용할려면 namespace를 사용해 사용한다.
namespace안에 namespace를 선언할 수 있다.

변수는 가급적 사용하는곳에서만 살아남게 선언한다.
객체지향프로그래밍의 기본적인 철학이다.

 

동적할당에선 범위,지속기간이 분리된다. 

#include <iostream>

using namespace std;

//만약에 같은이름의 변수와,함수를 사용하고 싶다면
//namespace를 사용한다.
namespace work1
{
	int a = 0;
	void getTest() {
		a += 1;
		cout << "work1::getTest() : " << a << endl;
	}
	
}


int a = 0;
void getTest() {
	a += 2;
	cout << "getTest() : " << a << endl;
}

int main()
{
	
	//apple변수를 선언해서 사용할 수 있게 된다.
	//OS로 부터 int메모리를 할당 받는다.
	//int main(){}안에서 사용가능 하다.
	int apple = 5;
	cout << apple << endl;
	if(true)
	{
		//{}밖에서 선언된 변수는 안 {}에서도 사용가능 하다.
		//apple변수가 위에 되어있기에 사용할 수 있다.
		//apple = 1;
		//cout << apple << endl;
		
		//같은이름으로 변수 선언이 가능하다.
		//내부 {} 안에서만 적용된다.
		//외부에 있는 apple은 같은 이름이 선언될 경우 숨긴다.
		//가급적이면 이름을 다르게 정하는것이 좋다.
		int apple = 1;
		cout << apple << endl;

		getTest();
		work1::getTest();
	}
	cout << apple << endl;

	return 0;
}

프로그램 메모리 주소

- 컴퓨터에서 프로그램이 실행되기 위해서는 프로그램이 메모리에 적재되어야한다.

- 당연히 프로그램의 크기를 충당할 수 있을 만큼의 메모리 공간이 있어야한다.


- 일반적인 컴퓨터의 운영체제는 메모리 공간을 네 가지로 구분하여 관리한다.

+ 코드영역 - 소스코드

+ 데이터영역 - 전역변수,정적변수

+ 힙영역 - 동적할당변수

+ 스택영역 - 지역변수,매개변수


전역변수

- 전역변수(Global Variable)란 프로그램의 어디서든 접근 가능한 변수를 말한다.

- main함수가 실행되기도 전에 프로그램의 시작과 동시에 메모리에 할당된다.

- 프로그램의 크기가 커질 수록 전역 변수로 인해 프로그램이 복잡해질 수 있다.

- 메모리의 데이터영역에 저장된다.

실습내용

실습결과



지역변수

- 프로그램의 특정한 블록에서만 접근가능하다.

- 함수가 실행될때마다 메모리에 할당되어 함수가 종료되면 메모리에서 해제된다.

- 메모리의 스택(Stack)영역에 기록된다.

실습내용

실습결과



정적변수

- 정적변수(Static Variable)는 특정한 블록에서만 접근할 수 있는 변수이다.

- 프로그램이 실행될 때 메모리에 할당되어 프로그램이 종료되면 메모리에서 해제된다.

- 메모리의 데이터 영역에 적재된다.

실습내용

실습결과



레지스터변수

- 레지스터변수(RegisterVariable)은 메인 메모리 대신 CPU의 레지스터를 사용하는 변수이다.

- 레지스터는 매우 한정되어 있으므로 실제로 레지스터에서 처리될 지는 장담할 수 없다.

실습내용

실습결과



함수의 매개변수가 처리될 때

- 함수를 호출할 때 함수에 필요한 데이터를 매개변수로 전달한다.

- 전달 방식은 1: 값에 의한 전달 방식, 2 : 참조에 의한 전달 방식이 있다.

- 값에 의한 전달 방식은 단지 값을 전달하므로 함수 내에서 변수가 새롭게 생성된다.

+ 지역변수에 가깝다.

- 참조에 의한 전달 방식은 주소를 전달하므로 원래의 변수 자체에 접근할 수 있다.

+ 전역변수에 가깝다.

+ 매개변수로 포인터 변수를 보내는것이다.


실습내용

실습결과


+ Recent posts