포인터 연산
포인터도 다른 변수들처럼 +/- 연산자를 적용 가능하다. 이렇게 할 경우 포인터가 참조하는 변수의 크기만큼 더한/뺀 주소를 참조하는 포인터 값이 계산된다. int *에 적용할 경우 4바이트씩 더한/뺀 값이 계산된다. double *는 8바이트다.
int value = 7;
double dvalue = 123.0;
int *ptr = &value;
double *ptr_d = &dvalue;
cout << uintptr_t(ptr - 1) << endl;
cout << uintptr_t(ptr) << endl;
cout << uintptr_t(ptr + 1) << endl;
cout << uintptr_t(ptr + 2) << endl;
cout << endl;
cout << uintptr_t(ptr_d - 1) << endl;
cout << uintptr_t(ptr_d) << endl;
cout << uintptr_t(ptr_d + 1) << endl;
cout << uintptr_t(ptr_d + 2) << endl;

포인터 연산을 통한 배열 인덱싱
배열은 곧 포인터이기 때문에 포인터의 연산을 배열의 인덱싱에도 활용할 수 있다. 포인터에 1씩 더할때마다 변수의 크기만큼 더한 메모리 주소를 참조하기 때문에 인덱싱을 통한 배열 접근과 동일하게 동작한다.
int array[] = { 9, 7, 5, 3, 1 };
int *ptr = array;
for (int i = 0; i < 5; i++)
{
cout << *(ptr + i) << " " << uintptr_t(ptr + i) << endl;
}

'C++ 학습' 카테고리의 다른 글
| [C++] 참조 변수 (0) | 2023.11.22 |
|---|---|
| [C++] 메모리 동적 할당 (0) | 2023.11.21 |
| [C++] 포인터 (0) | 2023.11.21 |
| [C++] 배열 (0) | 2023.11.19 |
| [C++] 자료형 가명 (0) | 2023.11.12 |