該例子說明幾個問題
在函數定義格式上有不同:
值傳遞在定義處: Exchg1(int x, int y);
引用傳遞在定義處:Exchg3(int &x, int &y);
調用時格式相同:
值傳遞: Exchg1(a, b);
引用傳遞:Exchg3(a, b);
功能上不同:
值傳遞的函數裡操作的不是a、b變量本身,只是將a、b值賦給了x、y。函數操作的只是x、y變量,a、b的值不會被Exchg1函數所修改。
引用傳遞Exchg3(a, b)函數裡是用a、b分別替代了x、y。函數裡操作的就是a、b變量本身,因此a、b的值可在函數裡被修改的。
函數參數傳遞的3種形式是人為劃分的,其本質都是隱含地將實參賦值給形參的值傳遞過程。
原文:徹底搞定C指針-姚雲飛
測試環境vc6.0
********************************************************************/
 #include <stdio.h>
void Exchg1(int x, int y);
void Exchg2(int *px, int *py);
void Exchg3(int &x, int &y);
int main(void)
{
int a = 4, b = 6;
//Exchg1(a, b);
//Exchg2(&a, &b);
Exchg3(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
void Exchg1(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n", x, y);
}
void Exchg2(int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
printf("*px = %d, *py = %d\n", *px, *py);
}
void Exchg3(int &x, int &y)
{
int tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n", x, y);
}