1. 포인터: 메모리의 주소 값을 저장하는 변수
int* pa = &a; //a의 주소값
주소 연산자 &: 변수 이름 앞에 사용하여 해당 변수의 메모리 주소 값을 반환한다.
참조 연산자 *: 포인터의 이름이나 주소 앞에 사용하여 해당 주소를 참조한 후 주소에 저장되어 있는 값을 반환한다.
int main()
{
int a = 10;
int* pa = &a;
cout << "주소연산자 결과: " << &a << endl; //a의 주소 반환
cout << "참조연산자 결과: " << *pa << endl; // 주소 pa에 저장되어 있는 값 반환 (10)
cout << "주소연산자와 참조연산자 동시사용 결과: " << *&a << endl; // a의 주소에 저장되어 있는 값 반환 (10)
}
포인터는 할당하려는 변수의 자료형과 일치해야 한다. 역참조 시 가리키는 내용을 해석하기 위해서이다.
2. 이중 포인터: 포인터를 가리키는 포인터를 뜻한다.
int main()
{
int p = 10;
int* pt = &p;
int** ppt = &pt;
cout << "pt의 값: " << pt << endl; //p의 주소
cout << "*pt의 값: " << *pt << endl; //p의 값 (10)
cout << "&pt의 값: " << &pt << endl; //pt의 주소
cout << "ppt의 값: " << ppt << endl; //pt의 주소
cout << "*ppt의 값: " << *ppt << endl; //ppt의 주소의 값 반환 >> p의 주소
cout << "&ppt의 값: " << &ppt << endl; //ppt의 주소
cout << "**ppt의 값: " << **ppt << endl; //*(*ppt) => *pt => p의 값 (10)
}
3. 포인터 연산
뺄셈: 두 포인터 사이의 거리를 나타낸다.
정수 값을 더하거나 빼는 것은 가능하지만 실수 값은 안된다.
4. 포인터 배열
배열은 이름만으로 값을 변경할 수 없다. 이외 사항은 포인터와 같기 때문에 배열을 포인터처럼 이용할 수 있다.
int main()
{
int arr[3] = {10, 20, 30};
int* pt_arr = &arr;
cout<< "배열 이름으로 배열의 요소 출력: " << arr[0] << ' ' << arr[1] << ' ' << arr[2] << endl;
//10 20 30 출력
cout<< "배열을 포인터처럼 요소 출력: " << *(pt_arr[0]) << ' ' << *(pt_arr[1]) << ' ' << *(pt_arr[2]) << endl;
//10 20 30 출력
}
'CS 지식' 카테고리의 다른 글
[C++] Name Mangling (Decoration) (0) | 2025.04.14 |
---|---|
[C++] 스마트 포인터 (0) | 2025.04.13 |
[C++] 이동 의미론 (Move Semantics) (0) | 2025.04.13 |
[C++] L-value, R-value (0) | 2025.04.13 |
객체지향 설계의 5가지 원칙 (SOLID) (0) | 2025.04.11 |