21.07.05 00:55 작성
·
355
0
int *ptr = nullptr;
int **ptrptr = nullptr;
int va = 5;
ptr = &va;
ptrptr = &ptr;
cout << ptr << " "<< *ptr<<" "<< &ptr<< endl;
cout << ptrptr << " " << *ptrptr << " " << **ptrptr << " " << &ptrptr << endl;
이렇게 출력을 해보면
003FF784 5 003FF79C
003FF79C 003FF784 5 003FF790
003FF784
이렇게 나오는데
**ptrptr 에서 *ptr로 출력하는 부분이 이해가 잘 안됩니다..
제가 이해한대로 설명하자면
*ptr부분은
ptr << *ptr << &ptr
ptr은 va에 대입 했으니 va 주소값이 나오고
*ptr은 주소안의 있는 값이 나오는거니 5 나오고
&ptr은 자신 주소값이 나오고
**ptrptr 부분은
ptrptr << *ptrptr << **ptrptr << &ptrptr에서
ptrptr은 ptr에 대입했으니 그 ptr은 va에 대입했으니 va주소값
*ptrptr과 **ptrptr 부분이 이해가 안갔는데
이렇게 출력해보고 제 생각은
**ptrptr의*ptrptr를 출력했을떄
*ptr의 ptr과 같은 맥락이고
**ptrptr를 출력했을떄
*ptr과 같은 맥락이다..라고 이해했습니다
즉 *ptr == ptr 같고 **ptrptr == *ptr 같다
제가 이해한게 맞을까요??
답변 2
1
포인터도 변수에요. 그냥 int a = 2 이런 변수와 마찬가지라고 생각하시면 이해하시는데 편합니다.
int 변수는 int 데이터 값을 담을 수 있는 저장공간인 셈이죠. int 인 값을 저장합니다.
마찬가지로 int * 변수는 어떤 int 데이터가 위치한 메모리 주소값을 담는 저장공간인 셈입니다.
또한 int ** 변수는 어떤 int * 데이터가 위치한 메모리 주소값을 담는 저장공간인 셈입니다. 포인터(주소값을 저장하는 변수)의 포인터인셈이에요.
이런 그림이라고 생각해주시면 됩니다. 주소는 제가 임의로 붙여본거에요.
**ptrptr 은 *(*ptrptr) 이나 마찬가지에요. 괄호가 있다고 생각하면 이해가 좀 더 편하실거에요.
*ptrptr 즉 ptrptr 을 간접참조 한다는건 ptrptr 이 가지고 있는 값에 해당하는 주소로 가서 그 원본 메모리를 참조한다는 것입니다. 즉, *ptrptr 은 ptr 이 가지고 있는 값이 되겠죠. ptrptr 은 ptr 의 주소를 담으니까요. 근데 ptr 또한 포인터이기 때문에 ptr 이 가지고 있는 값은 또 va 의 주소에요. 결론적으로 *(*ptrptr) = *ptr = 이 되어 va 메모리를 참조하는게 됩니다.
0
2021. 07. 05. 01:19
질문쓰고 다시한번 생각을 정리해서 써봅니다..
역참조가 주소에 접근해 주소안의 값을 가져오는거라
이해했었습니다
그래서 *ptr에 역참조해서 출력하면
대입했던 va주소안에 있는 5를 가져왔던거고
강의를 보면 초반에 *ptrptr도 역참조를 해준다 하셨습니다
역참조 연산자 *가 있으니 당연한건데
이중포인터 **라 좀 햇갈리더라구요
그래서 왜 va의 주소값이 나왔을까..? 의문이 들었습니다..
va = ptr = ptrptr 이 순서라
ptrptr의 역참조를 하면
ptrptr에 대입한 &ptr에 주소로 가면
ptr에 대입한 va의 주소값이 있으니 &va에 주소값이 나온건가?
그럼 **ptrptr은 역참조를 두번 한건가??
그럼 ptrptr에 대입한 &ptr에 주소로 가면
ptr에 대입한 &va의 주소값이 있고
&va의 주소로 가면 가르키는 값인 5를 가져온건가??
그럼 역참조 연산자가 * 일떈
역참조를 한번밖에 못하는거고
**역참조가 두개일떈 역참조를 두번할 수 있다..
이렇게 생각한게 맞을까요??
이게 맞다면 이중 포인터는
ptr = &va;
ptrptr = &ptr
이런식으로 역참조를 두번 사용 해야 할떄 사용하는게 맞고
삼중포인터는 ***역참조 연산자를 세번 사용하니
역참조를 세번 사용할 코딩이 있을시 사용하는거겠네요??
머리가 나빠 한번에 이해를 못하고
생각을 계속 정리하다 보니 이렇게 정리가 되었습니다..
제가 맞게 이해한걸까요??
2021. 07. 10. 02:01
그렇군요
제가 설명이 부족하긴 했지만
제가 이해한게 맞는거네요??