프로그래밍 언어/C++

C/C++ 포인터 역참조 (deference)

ShovelingLife 2022. 8. 2. 09:04

배열의 포인터는 크게 *(단일 포인터) 또는 **(이중 포인터)로 받을 수가 있다. 역참조는 해당 포인터가 자기 자신을 가리키게끔 하는건데 예시로 *ptr이면 ptr-> 성질과 비슷하다, 즉 null 포인터일 시 당연히 뻥난다.

  • *ptr는 arr의 시작 주소를 받아내고 전체 배열의 접근이 가능하다.
  • *ptr2는 단일 주소 포인터다, 오직 할당받은 &배열[인덱스]에만 접근 가능하다.
  • *(ptr3)[10] 이건 이중 포인터로 받아내는 것이다, 2차원 배열 또는 포인터 배열로 접근할 수가 있다.
#include <iostream>
using namespace std;

int main()
{
    int arr[10]{ 5 };

    for (int i = 1; i < 10; i++)
        arr[i] = arr[i - 1] + 5;

    int* ptr = arr;
    int* ptr2 = &arr[2];
    int(* ptr3)[10] = &arr;

    cout << *ptr << endl; // arr[0]
    cout << *ptr2 << endl; // arr[2]
    cout << ptr3[0][4] << " " << (*ptr3)[4] << endl; // arr[4]
}