ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] const 위치에 따른 포인터의 의미
    C++ 2019. 7. 18. 11:53

    포인터는 값을 변경하는 방식이 두가지가 있다.

    1. 역참조를 통해 주소가 가리키고 있는 값을 변경

    2. 포인터가 가리키는 주소를 변경

    그렇기 때문에 각각에 대해서 const를 선언할 수 있는데, const의 위치에 따라 그 의미가 달라진다.

     

     

     

    자료형 앞에 const 키워드가 붙는 경우

    (상수를 가리키는 포인터 혹은 포인터가 가리키는 변수의 상수화라고 하기도 한다.)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int value1 = 5;
        const int* ptr = &value1;
     
        int value2 = 6;
        ptr = &value2;
         // *ptr = 6; 불가능
    }
     
    cs

    이렇게 선언된 포인터는 가리키는 주소 값을 변경하는 것은 가능하지만, 역참조를 통해 값을 직접 바꾸는 것은 불가능 하다.

     

    자료형 뒤에 const 키워드가 붙는 경우

    (상수 포인터라고 하기도 한다.)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int value1 = 5;
        int* const ptr = &value1;
     
        int value2 = 6;
        //ptr = &value2; 불가능
         *ptr = 6;
    }
    cs

    이렇게 선언된 포인터는 역참조를 통해 값을 바꾸는 것은 가능하지만, 주소 값을 변경하는 것은 불가능하다.

     

     

    자료형의 앞뒤에 const 키워드가 붙는 경우

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int value1 = 5;
        const int* const ptr = &value1;
     
        int value2 = 6;
        // *ptr = 6; 불가능
        // ptr = &value2; 불가능
    }
    cs

    이렇게 선언된 포인터는 역참조를 통한 값 변경, 주소 값 변경 둘 다 불가능하다.

     

     

     

     

    참고자료

    https://www.inflearn.com/course/following-c-plus/dashboard (인프런, 홍정모의 따라배우는 C++)

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

    [C++] this 포인터  (0) 2019.08.29
    [C++] 함수 포인터  (0) 2019.08.27
    [C++] Tuple (복수의 값 반환)  (1) 2019.08.22
    [C++] 참조 변수(Reference variable)  (0) 2019.07.18
    [C++] 메모리와 동적할당(new, delete)  (0) 2019.07.17
Designed by Tistory.