C++的傳值呼叫、傳址呼叫 及參照 | C++基礎訓練

2010-07-04 00:50:50


http://blog.sssh.tp.edu.tw/haning/2330

函數的Call By Value、Call By Address 及Call By Reference 和指標、參照之間的關係,常常讓人暈頭轉向。蔡明志大師這本「指標的藝術」講解得深入淺出,值得一讀。以下我引用此書p.206-p.208的一個例子,再稍做修改,讓同學們可以藉由簡易圖示更加容易明白。如果能看原文,那當然是最好的啦!

Call By Value Call By Address Call by Reference

#include <iostream>

using namespace std;

 

void swap_by_address(int *, int*);

void swap_by_reference(int &, int &);

void swap_by_value(int, int);

 

int main()

{

      int x=100, y=200;

     

    /* Call by value */

      x=100; y=200;

      cout << "Call by value ";

    swap_by_value(x, y);  

      cout << "x=" << x << ", y=" << y << endl;

       

      /* Call by address */

      x=100; y=200;

      cout << "Call by address ";

    swap_by_address(&x, &y);

      cout << "x=" << x << ", y=" << y << endl;

 

      /* Call by reference */

      x=100; y=200;

      cout << "Call by reference ";

    swap_by_reference(x, y);  

      cout << "x=" << x << ", y=" << y << endl;

    system("pause");

    return 0;

}

     

void swap_by_value(int a, int b)

{

      int temp;

      temp = a;

      a = b;

      b = temp;

}

 
 


 


 

void swap_by_address(int *a, int *b)

{

      int temp;

      temp = *a;

      *a = *b;

      *b = temp;



 

 

void swap_by_reference(int &a, int &b)

{

      int temp;

      temp = a;

      a = b;

      b = temp;

}