C++기초

220324(2)_데이터 타입, 지역 변수와 정적 변수

2022. 4. 5. 15:28
#include <iostream>


int g_Number = 100;


//전역 변수 테스트
int Add(int Number1, int Number2)
{
	return Number1 + Number2 + g_Number;
}

int Add(int Num1, int Num2, int Num3)
{
	return Num1 + Num2 + Num3 + g_Number;
}

int Add1(int Number1, int Number2 = 20)
{
	return Number1 + Number2;
}

float Add(float Number1, float Number2)
{
	return Number1 + Number2;
}


/*
//C++의 메모리 영역: 스택, 데이터, 힙, 코드의 4가지.
* 스택 영역: 함수의 인자 혹은 함수의 내부에서 선언된 변수들의 메모리가 할당되는 영역이다.
	함수의 내부에서 선언된 변수를 지역변수라고 한다.
	함수의 인자는 매개변수라고 한다.

* 데이터 영역: 전역변수, 정적(static)변수들의 메모리가 할당되는 영역이다.
*
	*전역변수: 함수의 외부에 선언된 변수를 의미한다.
	함수의 외부에 선언되어 있기 때문에
	일반적으로 변수명 앞에 g_(global)를 임의로 붙여 전역변수임을 표시해 준다.
	이렇게 전역변수를 선언하면 이 선언 아래에 있는 코드에서는 이 변수를 공용으로 
	사용할 수 있다.
	또한 전역변수는 값을 초기화 안 해주면 자동으로 0으로 초기화가 된다.
	지역변수는 해당 함수가 종료되면 스택에서 정리가 되지만
	전역변수는 프로그램이 종료될 때 메모리에서 정리가 된다.

	만약 선언해놓고 사용하지 않으면 불필요하게 메모리만 잡아먹으므로 
	신중한 사용이 필요하다.
	(선생님은 개인적으로 안 쓰신다고 함)

	* 정적(static)변수: 변수 타입 앞에 static을 붙여주면 해당 변수는 정적변수가 된다.
		- 정적 변수는 처음 한번만 초기화가 되고 그 다음부터는 초기화 코드가 무시된다.
		- 정적 변수는 초기화를 하지 않으면 자동으로 0으로 초기화가 된다.
		- 정적변수는 지역변수에 static을 붙여서 만들어주어도 해당 함수가 종료되면 메모리를 제거하는 것이 아닌 프로그램이 종료가 되어야 메모리에서 제거가 된다.

* 힙 영역: 동적할당된 메모리가 할당되는 영역이다. 'new'를 통해 만든 데이터는 전부 힙영역에 들어간다.
	필요할 때 공간을 할당하고 원할 때 메모리를 제거할 수 있다.
	동적할당 시 문제가 생길 수 있는 부분으로 메모리 단편화가 있다.
	cf)메모리 단편화에 대해 알아보기



* 코드 영역: 작성한 코드를 컴파일러가 바이너리코드(0, 1로 구성된 코드) 로 만들어 주고 이 바이너리 코드를 이용해서 실행파일을 만들어준다.
	실행파일을 더블클릭해서
	이때 실행파일을 구성하는 바이너리코드가 메모리에 저장되게 된다.
	이렇게 코드가 저장되는 영역을 코드영역이라고 한다.

*/



//전역 변수와 정적 변수 실험
void Test()
{
	int Number = 100;
	std::cout << "Test : " << Number << std::endl;
	++Number;
}
void TestStatic()
{
	static int Number = 100;
	std::cout << "TestStatic : " << Number << std::endl;
	++Number;
}


int main()
{
	std::cout << Add(10, 20) << std::endl;
	std::cout << Add(30, 40) << std::endl;
	std::cout << Add(3.14f, 21.374f) << std::endl;

	std::cout << Add1(50, 60) << std::endl;
	std::cout << Add1(50) << std::endl;



	TestStatic();
	Test();
	TestStatic();
	Test();
	TestStatic();
	Test();
	//Test() 에 선언된 Number 변수는 지역 변수로,
	//함수를 호출할 때마다 초기화되어 계속 100으로 출력되지만
	//TestStatic() 에 선언된 Number 변수는 정적 변수로,
	//함수를 처음 호출 할 때만 초기화되고 이후에는 초기화되지 않고 값이 더해진다.

	return 0;
}

'C++기초' 카테고리의 다른 글

220325(1)_함수(4)_함수의 재귀(Recursion)  (0) 2022.04.05
221324(3)_함수(3)_함수 포인터  (0) 2022.04.05
220324(1)_함수(2)_함수의 오버로딩, 디폴트 인자  (0) 2022.04.05
220323(6)_함수를 활용한 숫자야구  (0) 2022.04.05
220323(4) - 함수(1)  (0) 2022.03.25
'C++기초' 카테고리의 다른 글
  • 220325(1)_함수(4)_함수의 재귀(Recursion)
  • 221324(3)_함수(3)_함수 포인터
  • 220324(1)_함수(2)_함수의 오버로딩, 디폴트 인자
  • 220323(6)_함수를 활용한 숫자야구
hyrule
hyrule
hyrule
C++ 프로그래밍 공부
hyrule
전체
오늘
어제
  • 분류 전체보기 (205)
    • C++기초 (50)
    • WIN32API FrameWork (109)
      • 한단계씩 직접 구현 (82)
      • 원본 (15)
      • 코드별 설명 개별저장(검색용) (12)
    • 자습 (21)
    • C++ TIPS (11)
    • 연습 노트 (3)
    • ETC (6)
    • DX2D StarCraft 모작 (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 스타크래프트
  • C++
  • hello
  • Tistory
  • Windows 11
  • notion

최근 댓글

최근 글

hELLO · Designed By 정상우.
hyrule
220324(2)_데이터 타입, 지역 변수와 정적 변수
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.