본문 바로가기
C++

포인터의 개념

by 원석초이 2023. 9. 30.

포인터(Pointer)란 변수의 주소를 저장하는 타입의 변수입니다. 주소값자체가 포인터라고 생각해도 좋습니다. 

포인터를 사용하면 메모리를 효율적으로 활용할 수 있고, 동적으로 할당된 데이터에 접근할 수 있습니다.

 

포인터 변수 선언

  • 자료형 *포인터이름;
  • 포인터이름 = &변수;

주소 연산자(&)를 사용하여 변수의 주소값을 반환하여 포인터에 저장합니다.

 

예를 들어 이런식으로 선언 할 수 있습니다.

int x = 10;
int *ptrx;

ptrx = &x; //x의 주솟값을 포인터변수 ptrx에 저장

 

역참조 연산자

포인터 변수는 메모리 주소가 저장 되어 있는데 이때 메모리에 저장된 값을 가져오기 위해 역참조 연산자 *를 사용합니다.

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    int *ptrx;

    ptrx = &x; //x의 주솟값을 포인터변수 ptrx에 저장
    
    cout << "ptrx: " << ptrx << endl; //포인터 ptrx 출력
    cout << "*ptrx: " << *ptrx; // *ptrx 출력(역참조 연산자 * 이용)
 
}

이런 식으로 * 를 사용하여 저장된 주소의 값을 가져 올 수 있습니다.

 

#include <iostream>

using namespace std;

int main()
{
    int x = 10;
    int *ptrx;
    
    ptrx = &x;
    
    cout << "ptrx: " << ptrx << endl;  //포인터 ptrx 출력 
    cout << "*ptrx: " << *ptrx << endl;  //*ptrx 출력(역참조 연산자 * 이용) 
    
    *ptrx = 20;
    
    cout << "---- *ptrx = 20 실행 후 ----" << endl;
    
    cout << "x: " << x << endl;  //포인터 ptrx 출력 
    cout << "*ptrx: " << *ptrx;  //*ptrx 출력(역참조 연산자 * 이용) 

    return 0;
}

그리고 이런식으로 역참조를 이용하여 원본 x의 값을 바꿀 수도 있습니다.

 

정리를 해보자면

  • x: 변수 x의 값을 가져오거나 저장할 수 있습니다.
  • &x: &을 이용해 x의 주소를 구할 수 있습니다.
  • *ptrx: *를 이용해 포인터 해당 주소에 저장된 값에 접근할 수 있습니다.
  • ptrx: 포인터는 변수의 메무리 주소를 가리킵니다.