ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 포인터와 역참조
    Coding/Tip !! 2018. 9. 19. 05:12

    포인터 *


    * 란 역참조(Dereference)연산자라는 의미이다. 

    ->  포인터 변수에는 메모리 주소가 저장되는데 이 메모리주소의 값을 가져올때 사용하는 것이 바로 역참조 연산자(*)이다.


    1
    2
    3
    4
    5
    6
    7
    int *pointer; // 포인터 변수 선언
     
    int test =1// test에 1을 저장
     
    pointer = &test; // test의 메모리 주소를 포인터 변수에 저장한다는 의미
     
    *pointer = 7// 역참조 연산자를 의미함으로 test의 메모리 주소에 접근하여 7을 저장함



    이 경우

    cout << *pointer << endl; 

    을 하게되면 역참조 연산자인 (*)를 사용했음으로 test의 메모리 주소에 접근하여 그 내부의 값을 가져오게된다.


    역참조 연산자는 포인터 앞에 오게 되고 이 때 알아둬야할 것은 

    포인터는 변수의 주소만을 가리키는 것이며 주소에 접근하여 값을 가져오는 것은 역참조라는 것다.


     # 포인터는 변수의 주소만을 가리킨다.


    # 역참조는 주소에 접근하여 값을 나타낸다.


    포인터와 역참조 모두 *를 사용하기 때문에 헷갈릴 수 있지만

    포인터는 선언시에 사용하고 

    이러한 포인터를 사용할 때의 *는 포인터의 메모리 주소를 역참조 하겠다는 의미로 생각하면 편하다.


    역참조 연산자는 자료형을 바꾸는 기능도 가지고 있다.

    예를 들어 위의 예시에서


    int *point; 에서 *point처럼 역참조를 사용하면 pointer to int 에서 단순히 int가 된다.

    int poiner -> int


    1
    2
    3
    4
    5
    6
    7
    8
    int *point;
     
    int test =2;
     
    point = test; // point 는 int pointer 형이고 test는 int임으로 경고발생
     
    *point = test;// *point는 int형이고 test도 int임으로 자료형 일치!

    point = &test; // point는 int pointer 형이고 &test는 int형 변수의 주소임으로 일치!
    (pointer of int) = (address of int)
     





    반응형

    'Coding > Tip !!' 카테고리의 다른 글

    foo 함수  (0) 2018.09.19
    Null Pointer Dereference (널 포인터 역참조) 수정중  (0) 2018.09.19
    friend 키워드 사용  (0) 2018.09.19
    ::연산자와 . 연산자  (0) 2018.09.19
    static 변수  (0) 2018.09.18

    댓글

Designed by Tistory.