본문 바로가기

languages/c, c++

Pass by Pointer, Pass by Pointer Reference

#include <stdio.h> // https://makershackers.tistory.com/369
int * PTR_b;

void Function_A(int* A) {
    printf("\n Pass by Pointer가 불려왔습니다. \n");
    *A = 3;
    A = PTR_b;
    *A = 4;             }
void Function_B(int* (&B)) {
    printf("\n Pass by Pointer Reference가 불려왔습니다. \n");
    *B = 5;
    printf("&B : %p\n ", &B);
    printf("B  : %p\n ", B);
    printf("\n B, PTR_b가 대리하고 있는 방이 바뀌었습니다.. \n");
    B = PTR_b;
    printf("&B : %p\n ", &B);
    printf("B  : %p\n ", B);
    *B = 6;                 }

int main (void)
{
    int a = 1;
    int b = 2;
    int *PTR_a = &a;
    printf("  ====== 상황 정리 ======  \n");
    // printf("&PTR_a의 현재 값은?  %p\n", &PTR_a);
    PTR_b = &b;
    Function_A(PTR_a);
    // Function_B(PTR_a);
    // printf("&PTR_a의 현재 값은?  %p\n", &PTR_a);
    // printf("PTR_a의 현재 값은?  %p\n", PTR_a);
    if (PTR_a == &a)  { printf(" PTR_a는 a를 대리합니다.\n"); }
    else if (PTR_a == &b) { printf(" PTR_a는 b를 대리합니다.\n"); }
    else { printf("PTR_a는 또 다른 방을 대리합니다.\n"); }
    
    if (PTR_b == &a) { printf(" PTR_b는 a를 대리합니다.\n"); }
    else if (PTR_b == &b) { printf(" PTR_b는 b를 대리합니다.\n"); }
    else { printf("PTR_b는 또 다른 방을 대리합니다.\n"); }
    printf(" a의 현재 값은?  %d\n", a);
    printf(" b의 현재 값은?  %d\n", b);

    return 0;
}