2014年2月27日 星期四

C - call by value, call by value of pointer, call by reference

Call by value

int swap(int a, int b) 

{
    int tmp = a;
    a = b;
    b = tmp;
    printf("%d, %d", &a, &b); // 2686752, 2686756
    printf("%d, %d", a, b); // 20, 10
}

int main() 
{
    int a, b;
    a = 10;
    b = 20;

    printf("%d, %d", &a, &b); // 2686788, 2686784
    swap(a, b);
    printf("%d, %d", a, b); // 10, 20
}

Note
    Just copy the value into swap function

Call by value of pointer
int swap(int *a, int *b) 

{
    int tmp = *a;
    *a = *b;
    *b = tmp;
    printf("%d, %d", &a, &b); // 2686752, 2686756
    printf("%d, %d", a, b); // 2686788, 2686784
    printf("%d, %d", *a, *b); // 20, 10
}

int main() 
{
    int a, b;
    a = 10;
    b = 20;

    printf("%d, %d", &a, &b); // 2686788, 2686784
    swap(&a, &b);
    printf("%d, %d", a, b); // 20, 10
}

Note:
    Send the address of the value into swap function

Call by refrence
int swap(int &a, int &b) 

{
    int tmp = a;
    a = b;
    b = tmp;
    printf("%d, %d", &a, &b); // 2686788, 2686784
    printf("%d, %d", *a, *b); // 20, 10
}

int main() 
{
    int a, b;
    a = 10;
    b = 20;

    printf("%d, %d", &a, &b); // 2686788, 2686784
    swap(a, b);
    printf("%d, %d", a, b); // 20, 10
}

Note
    alias

Reference
    什麼是傳值call by value、傳址call by address、傳參考call by reference
    [C++] Call by value、Call by pointer、Call by reference

沒有留言:

張貼留言