值傳遞和(地址)引用傳遞
阿新 • • 發佈:2017-08-18
out swa 改變 nbsp 調用 oid cout div value
#include <iostream> #include <string> using namespace std; //值傳遞:(傳值調用) //效果上:方法內的改變不會影響到方法外 //本質上:只改變了形參的值,並沒有改變實參的值 //條件上:形參的類型為基本類型或者一般復雜類型 void swap(int num1,int num2) //傳值調用 { int temp; temp = num1; num1 = num2; num2 = temp; cout << "swap: " << num1 << "" << num2 << endl; } //引用傳遞:(地址傳遞)(傳址調用) //效果上:方法內的改變會影響到方法外 //本質上:通過形參指針去改變了實參的值 //條件上:形參為指針和數組和引用時一般都是引用傳遞,(特殊情況:當函數內只改變了指針的指向,而沒有通過指針去修改實參值時,仍然是傳值調用) void swap_point(int *num1,int *num2) //傳址調用 { int temp; temp = *num1; *num1 = *num2; *num2 = temp; cout << "swap_point:" << *num1 << " " << *num2 << endl; } void swap_value(int *num1,int *num2) //傳值調用 { int *temp; temp = num1; num1 = num2; num2 = temp; cout << "swap_value :" << *num1 << " " << *num2 << endl; } void swap_two(int **num1,int **num2) //傳址調用 { int *temp = NULL; temp = *num1; *num1 = *num2; *num2 = temp; cout << "swap_two: " << **num1 << " " << **num2 << endl; } void swap_ref(int &num1,int &num2) //傳址調用 { int temp; temp = num1; num1 = num2; num2 = temp; cout << "swap_ref " << num1 << " " << num2 << endl; } int main() { int a = 10,b = 20; cout << "a = " << a << "b = " << b << endl; #if 0 swap(a,b); #endif #if 0 swap_point(&a,&b); #endif #if 0 swap_value(&a,&b); #endif #if 0 int *p1 = &a,*p2 = &b; cout << *p1 << " " << *p2 << endl; swap_two(&p1,&p2); cout << "a = " << *p1 << "b = " << *p2 << endl; #endif swap_ref(a,b); cout << a << " " << b << endl; }
值傳遞和(地址)引用傳遞