포인터, 메모리 영역

2025. 2. 21. 11:59원티드_언리얼RPG 2기/C++

변수


변수의 속성 4가지
1) 이름
2) 값
3) 메모리크기(타입)
4) 메모리주소(&)

포인터: 메모리 주소를 값으로 가지는 변수(데이터 타입)

역참조: 포인터가 가리키고 있는 (담고있는) 메모리 주소의 값에 접근하는 것


메모리주소를 값으로 가져야 하는 이유?
1) 변수의 접근이나 제어가 불가능한 영역에서 해당 변수에 접근해서 값을 제어하고 싶을때
2) 동적할당 (new) 를 통해서 런타임때 메모리에 할당되는 변수를 제어하기 위해서

 

 


동적할당 (new 키워드, delete 키워드)


1) 개념 : 힙 메모리에 자료를 저장할 공간을 할당받는 것

힙 메모리와 스택 메모리

 

 

 

스택 

 

특정 코드 구문 내에서 { ... } 임시로 할당되는 메모리 영역 (지역변수 )


힙 

프로그래머가 자유롭게 할당하고 해제할 수 있는 메모리 영역

 

1) 데이터의 크기가 일정하지 않은 형태의 자료형


2) 서로 다른 코드 구문 {..a..} {..b..} a 변수의 값을 제어하고 싶을때 메모리 주소
   포인터를 사용해서 접근할 수 있다.

 

(+코드영역: 지역변수의 상수를 제외한 리터럴 상수가 저장, 데이터 영역)

 

 

 

포인터 예제

 

int main()
{
   int num = 3; //스택 메모리에 자료를 저장할 공간을 할당
   int* pNum = #
	int** ppNum = &pNum;

   int* pTest = new int; //힙 메모리에 int데이터타입(4바이트)만큼 메모리를 할당받음
	cout << "pTest 힙 메모리 할당 주소 " << pTest << endl;
	cout << "pTest 힙 메모리 할당 주소의 값 " << *pTest;

	delete pTest; //메모리 반환, delete를 잊으면 메모리 누수가 발생한다. 

	int * arrTest = new int[10];
	delete[] arrTest;

	int mapSize;
	cin >> mapSize;
	 int arrTest1[mapSize]  정해진값이 아니라 사용불가
	 int * arrTest2 = new int[mapSize];
}

 

인라인 함수 )  함수앞에 inline 키워드를 붙임


장점: 함수를 생성하지 않고 함수의 코드 호출한곳에 직접 집어넣음. 함수 호출 오버헤드가 사라짐.

<어서와 C++ 교재 c++ 11,14 추가된점>

 

auto 타입 으로 자동타입추론

초기화 int i {} ; string arr { };
 
범위기반 for-loop 문  : 범위안의 모든 요소에 대한 반복, 범위(배열, 컨테이너, 시퀀스)
for(auto i : list){실행문};  

초기화 리스트
Time(int h, int m) : hour(h) , minute(m) {   }

 

사용자 정의 리터럴

Distance d = 36.0_mi + 42.0_km;         // 사용자 정의 리터럴
std::string str = "hello"s + "World"s;  // 표준 라이브러리인 <string> 의 리터럴
complex<double> num =
(2.0 + 3.01i) * (5.0 + 4.3i);       // 표준 라이브러리인 <complex> 의 리터럴
auto duration = 15ms + 42h;             // 표준 라이브러리인 <chrono> 의 리터럴

/*Distance 클래스. 킬로미터와 마일에 대한 리터럴을 하나씩 정의하고 
간단히 auto = 42.0km 또는 auto = 42.0mi을 작성하여 사용자가 측정 단위를 명시할 수 있다.
사용자 정의 리터럴에 대한 성능의 이점이나 단점은 없다.
주로 편의상 또는 컴파일 시간 형식 추론을 위해 사용됨. */

//사용자 정의 리터럴을 구현하려면 ""연산자와 범주에 속하는 인자를 가지고 해야함
ReturnType operator "" _a(unsigned long long int);   // int 형 사용자 리터럴
ReturnType operator "" _b(long double);              // double 형 사용자 리터럴
ReturnType operator "" _c(char);                     // char 형 사용자 리터럴
ReturnType operator "" _d(wchar_t);                  // char 형 사용자 리터럴
ReturnType operator "" _e(char16_t);                 // char 형 사용자 리터럴
ReturnType operator "" _f(char32_t);                 // char 형 사용자 리터럴
ReturnType operator "" _g(const     char*, size_t);  // 문자열(char* 또는 string) 형 사용자 리터럴
ReturnType operator "" _h(const  wchar_t*, size_t);  // 문자열(char* 또는 string) 형 사용자 리터럴
ReturnType operator "" _i(const char16_t*, size_t);  // 문자열(char* 또는 string) 형 사용자 리터럴
ReturnType operator "" _g(const char32_t*, size_t);  // 문자열(char* 또는 string) 형 사용자 리터럴
ReturnType operator "" _r(const char*);              // 원시 리터럴 연산자
template<char...> ReturnType operator "" _t();       // 템플릿 리터럴 연산자

(출처:https://openmynotepad.tistory.com/31)

'원티드_언리얼RPG 2기 > C++' 카테고리의 다른 글

열거형,클래스  (0) 2025.02.27
구조체, 함수  (0) 2025.02.26
변수, 상수, 코드표기법  (0) 2025.02.21
실습: 구구단 출력  (0) 2025.02.21
실습: 탈출게임  (0) 2025.02.21