반응형

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

 

포인터로 C ++ 포인터 (멀티 레벨 간접 주소)

포인터로 C ++ 포인터 (멀티 레벨 간접 주소) C ++ 포인터 포인터의 간접 다단 형식의 포인터가 주소 지정, 또는 포인터 체인이다. 일반적으로, 포인터 변수의 주소를 포함합니다. 우리는 포인터의

www.w3big.com

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값과 동일)

 

 

개념이 어렵진 않다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기