포인터(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: 포인터는 변수의 메무리 주소를 가리킵니다.