2020年7月19日 星期日

call by value, call by address, call by reference

=================    call by value   ====================
其主要的意思, 參數以數值方式傳遞, 將一個變數的值, 帶入到副程式當中使用
範例如下:

void call_by_value(int value)
{
    int a;
    a = value
    print("call by value a=%d\n", a);
}

int main()
{
    int a=10;
    call_by_value(a);
    return 0;
}



==================   call by address  =====================
參數以記憶體位址的方式傳遞, 帶入到副程式中使用, 此帶入的變數也會在副程式的運算當中被更動.
範例如下:

void call_by_address_swap(int *a, int *b)
{
    int c;
    c=*a;
    *a=*b;
    *b=c;
}

int main()
{
    int value1=5;
    int value2=10;
    printf("before swap: value1=%d, value2=%d\n", value1, value2);
    call_by_address_swap(&value1, &value2);
    printf("after swap: value1=%d, value2=%d\n", value1, value2);
    return 0;
}


===================   call by reference  ====================
將參數以數值的方式傳遞到呼叫此參數的副程式,副程式需要有一個參考來接收這個參數,這是只有C++才有的,C是沒有的
範例如下:

void call_by_reference_swap(int &a, int &b)
{
    int c;
    c=a;
    a=b;
    b=c;
}

int main()
{
    int value1=5;
    int value2=10;
    printf("before swap: value1=%d, value2=%d\n", value1, value2);
    call_by_reference_swap(value1, value2);
    printf("after swap: value1=%d, value2=%d\n", value1, value2);
    return 0;
}

沒有留言:

張貼留言