call by value, call by address, call by reference
call by value, call by address, call by reference 差別在哪?
int main() {
int a = 1 ;
int b = a ; //將a的值複製到b的新記憶體區域
return 0;
}
在這個例子中,==使用了一個swap function,它的功能是將a和b傳入的address進行交換==,之後在main裡面利用&符號傳入address,然後執行一遍就可以發現,交換前a的值為1,b的值為0,交換後a的記憶體空間和b交換,所以各自代表的值也變成了0和1。
當你使用call by address時,經常會使用到pointer,想當年當接觸C, C++的我對於pointer(指標)也是一知半解,符號*和&的用法除了知道理論外動手實際去做一遍才能熟能生巧,之後介紹一篇pointer的教學吧
void swap(int *address_a, int *address_b) {
int temp = *address_a ;
*address_a = *address_b;
*address_b = temp;
}
int main() {
int a = 1;
int b = 0;
cout<< a << " " << b << endl; // 1 0
swap(&a, &b); // 傳入a, b的address進行交換
cout<< a << " " << b << endl; // 0 1
return 0;
}
Call by reference
看起來是不是和call by address很像呢,其實他也是==利用pointer的方法實作,只是更簡潔==,但這個方法只能在C++上使用,所以寫C的朋友們將就點使用call by address吧 !
void swap(int &address_a, int &address_b) {
int temp = address_a ;
address_a = address_b;
address_b = temp;
}
int main() {
int a = 1;
int b = 0;
cout<< a << " " << b << endl; // 1 0
swap(a, b); // 傳入a, b的address進行交換
cout<< a << " " << b << endl; // 0 1
return 0;
}
Last updated
Was this helpful?