1. 程式人生 > >值傳遞和(地址)引用傳遞

值傳遞和(地址)引用傳遞

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; }

值傳遞和(地址)引用傳遞