C/C++ pointers to pointers
pointer to pointer
int a = 5;
int* p = &a ;
int** p2 = &p;
printf("%d, %d, %d\n",&a, &p, p2);
printf("%d, %d", *p, *p2);
다음과 같이 실행하면 이런 결과가 나옵니다.
p에는 a의 주소가 들어있습니다.
p2에는 p의 주소가 들어있습니다.
p2의 주소에 저장되어있는 주소는 p의 주소입니다.
그러므로 *p2를 출력하면 p가 가리키는 주소 즉 a의 주소가 나옵니다.
p의 주소에는 a의 주소가 들어있습니다.
**p2를 출력하면 *p2 = p가 가리키는 주소.
**p2 = p가 가리키는 주소의 값.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int a = 5;
int* p = &a ;
int** p2 = &p;
int*** r = &p2;
printf("a: %d, p: %d, p2: %d, r: %d\n", &a, &p, &p2, &r);
printf("a: %d, p: %d, p2: %d, r: %d\n", a, *p, *p2, *r);
printf("a: %d, p: %d, p2: %d, r: %d\n", a, *p, *(*p2), *(*(*r)));
//전부 5가 출력됨
return 0;
}
p에는 a의 주소가 들어있습니다. p를 출력하면 a의 주소의 값 즉 5가 나옵니다.
p2에는 p의 주소가 들어있습니다. *p2를 출력하면 p의 값 즉 a의 주소가 출력됩니다.
r에는 p2의 주소가 들어있습니다. *r을 출력하면 p2가 가지는 값 p의 주소가 나옵니다.
*(p2)는 p2에는 p의 주소, p의 주소에서의 값은 &a, &a의 값은 5
Leave a comment