less than 1 minute read

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);

다음과 같이 실행하면 이런 결과가 나옵니다.
shot p에는 a의 주소가 들어있습니다.
p2에는 p의 주소가 들어있습니다.
p2의 주소에 저장되어있는 주소는 p의 주소입니다.
그러므로 *p2를 출력하면 p가 가리키는 주소 즉 a의 주소가 나옵니다.
p의 주소에는 a의 주소가 들어있습니다.
**p2를 출력하면 *p2 = p가 가리키는 주소.
**p2 = p가 가리키는 주소의 값.

shot2
shot2

#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