본문 바로가기
IoT 디바이스 활용/C++

C++ - 포인터

by cooluk 2020. 10. 12.

포인터와 동적 객체 생성


포인터

  • 포인터(pointer)

    • 메모리의 주소값을 저장하는 변수

    • 변수 선언시 타입 뒤에 *를 지정

    • int *p; // 정수를 가리키는 포인터 선언

      image-20200908151322312


  • 주소 연산자 &

    • 기존 변수의 주소 값을 획득하여 포인터 변수에 저장할 때 사용

    • int number = 10;
      int *p; // 정수를 가리키는 포인터 선언
      p = &number;

      image-20200908151415800

  • 간접 참조 연산자 *

    • 포인터 변수에는 주소가 저장되어있음

    • 그 주소에 저장되어 있는 데이터를 얻을 때 사용

      image-20200908152517004


      #include <iostream>
      using namespace std;
      int main() {
        int number = 0;
        double d = 20.2;
      
        int *p = &number;
        // p = &d;  // 에러
        double *pd = &d;
      
        cout << p << endl;
        cout << *p << endl;
      
        cout << sizeof(number) << "," << sizeof(d) << endl;
        cout << sizeof(p) << endl;  // int *
        cout << sizeof(pd) << endl;  // double *
      
        return 0;
      }

      0x61fe0c
      0
      4,8
      8
      8




  • NULL

    • 포인터가 아무것도 가리키지 않는 것을 의미하는 특수한 데이터

      • 0으로 해석되므로 int이기도 하면서 포인터 이기도 함
    • 포인터 변수를 초기화할 때 사용

    • nullptr 사용 가능

      • 포인터로만 해석
      #include <iostream>
      using namespace std;
      
      void f(int i) {
        cout << "f(int)" << endl;
      }
      
      void f(char *p) {
        cout << "f(char *)" << endl;
      }
      
      int main() {
        int *pNumber = NULL;  // 권장
        int *pNumber2;  // 권장하지 않음, 임의의 초기값을 가짐
      
        if(pNumber != NULL) {  // 포인터 안정성 검사
            cout << *pNumber << endl;
      }
      
      if(pNumber2 != NULL) {  // 결과 장담 못함...
            cout << *pNumber2 << endl;
      }
      
        // f(NULL); -- int, char * 둘 다 가능하므로 에러
        f(nullptr);  // nullptr : 포인터 NULL의 의미하는 키워드
        return 0;
      }

      17439201
      f(char *)


    관례 : pointer 변수 --> pNumber


'IoT 디바이스 활용 > C++' 카테고리의 다른 글

C++ - 객체의 동적 생성  (0) 2020.10.12
C++ - 동적 할당 메모리  (0) 2020.10.12
C++ - 객체 배열, 벡터  (0) 2020.10.12
C++ - 객체와 함수  (0) 2020.10.12
C++ - 생성자와 접근 제한자  (0) 2020.10.12

댓글