Pointer to Pointer

Kimbab1004·2024년 2월 13일
0

CPP

목록 보기
5/27


오늘은 Pointer to Pointer(다중 포인터, 이중 포인터)와 다차원 배열의 관계에 대해서 학습하였다. 포인터에 대해 알기 위해 많이 노력했다고 생각했는데 새롭게 알게된 다중 포인터로 머리를 한대 맞은거 같은 느낌이 들었다.

포인터는 주소를 저장하는 변수이다.
다중 포인터는 포인터의 주소값을 가리키는 포인터이다.

int num = 1;
int* ptr = #
int** double_ptr = &ptr;
function(double_ptr);

다중 포인터는 다차원 배열에 접근하기 위해 자주 사용된다. 1차원 배열에 포인터로 인한 접근은 상당히 간단한데

int arr[10];
int* p;
p = arr;

cout << p[0] << endl;
cout << arr[0] << endl;

두 결과는 똑같다. 하지만 다중 포인터를 1차원 배열에 접근하는 방식으로 접근할 시 문제가 발생한다.

//1,2,3,4
int arr2[2][2] = { {1,2},{3,4} };

int* pp = arr2;

cout << (**pp) << endl; //1이 출력될까? 오류남

그렇기에 다차원 배열에 접근하기 위해서는 다중 포인터를 사용해야 하는데 pp이런 식의 무식한 접근은 사용하면 안된다.

	int arr[3][2] = {
            {11, 22},
            {33, 44},
            {55, 66},
    };

    int (*pointer)[2]; // 행을 2로 하는 2차원 배열 포인터 하나 생성

    pointer = arr;
    
    assert(&arr[0][0] == *pointer);
    assert(&arr[0][1] == *pointer + 1);

    assert(&arr[1][0] == *(pointer + 1));
    assert(&arr[1][1] == *(pointer + 1) + 1);

    assert(&arr[2][0] == *(pointer + 2));
    assert(&arr[2][1] == *(pointer + 2) + 1);

이와 같이 다차원 배열에 포인터를 이용해 주소접근을 하기 위해서는 다중 포인터를 사용해야한다.

0개의 댓글