C++ 사용에서 포인터(pointer)는 빼놓을 수 없는 기능.
간략하게 짚고 넘어가자...
1. 포인터
-. 포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 포인터가 가리키는 값을 가져오는 것을 역참조라고 한다.
-. 포인터를 메모리의 임의의 주소를 가리키도록 할 수 있으며 포인터의 연산도 가능하다.
-. 일반적으로 포인터는 메모리 주소로 바꿀 수 있다. 포인터는 다른 변수나 함수를 가리키도록 사용된다.
-. 자세한 설명은 위키에서: ko.wikipedia.org/wiki/%ED%8F%AC%EC%9D%B8%ED%84%B0_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
※ 중요한 점은 다른 프로그램의 메모리에 접근 가능하단 것. 즉, 실행중인 게임에 후킹(hooking)이 가능하다. C#에서는 포인터를 쓰려면 마샬링(marcmarshalling) 해줘야 한다. 결국 구현은 되는데, 조금 귀찮아짐.
2. 예제 코드를 보자.
여기서 가져옴: www.w3big.com/ko/cplusplus/cpp-pointer-to-pointer.html
int main(void) {
int var;
int* ptr;
int** pptr;
var = 3000;
//ptr에 var의 주소 대입
ptr = &var;
//pptr에 ptr의 주소 대입
//ptr: var의 주소를 가지리키는 포인터
pptr = &ptr;
cout << "Value of var :" << var << endl;
cout << "address of var :" << &var << endl;
cout << "------------------------------------" << endl;
cout << "Value available at *ptr :" << *ptr << endl;
cout << "Value of ptr = address of var :" << ptr << endl;
cout << "Address of ptr :" << &ptr << endl;
cout << "------------------------------------" << endl;
cout << "Value available at **pptr :" << **pptr << endl;
cout << "Value available at *pptr :" << *pptr << endl;
cout << "Value available at pptr :" << pptr << endl;
return 0;
var: 원천 값이 저장된 변수
ptr: var의 주소를 가리키는 포인터
pptr: ptr의 주소를 가리키는 멀티레벨 포인터 (multilevel pointer)
즉, 포인터를 가리키는 포인터의 작성이 가능하다.
3. 출력 결과를 보면
var 값: 3000
var 주소: 0136FD88
ptr 값: 0136FD88 (var의 주소와 동일)
ptr 주소: 0136FD7C
pptr 값: 0136FD7C (ptr의 주소의 동일)
*pptr 값: 0136FD88 (ptr 값과 동일)
**pptr 값: 3000 (var값과 동일)
개념이 어렵진 않다.
'C++' 카테고리의 다른 글
[C++] 프로세스 목록 (process list, window titles) 가져오기 (0) | 2020.12.27 |
---|---|
[C++] C++ 기초2 - 유니코드(Unicode) 한글문자 출력 (0) | 2020.12.27 |
[C++] C++ 기초1 - class, source, header 추가 (0) | 2020.12.27 |
최근댓글