double calAver(double x, double y),其副程式將會回傳一個平均值的結果,稱傳值函數(Call by Value)
這邊探討另一種為傳址函數,其說明副程式如下
Example
x = 100 ; y = 200;
swap_by_value(x,y);
swap_by_address(&x,&y);
void swap_by_value(int a, int b)
{
int= temp;
temp = a;
a = b;
b = temp;
}
其執行時a、b值會互相交換,但返回主程式時,a、b的值還是保持原來值(x=100,y=200)
,但利用傳址函數則不會產生此問題。
void swap_by_address(int *a ,int *b)
{
int= temp;
temp = *a;
*a = *b;
*b = temp;
}
原因在於傳址函數是利用位址的方式進行,假設記憶體位址為x = 0x04 , y = 0x08 ;
swap *a值存放為x的記憶體位址、*b值存放y的記憶體位址,
而由此範例可知經Call by address傳址才會使兩數交換,但是透過位址方式在交換。
Ref
1.http://wp.mlab.tw/?p=176
2.指標的藝術
沒有留言:
張貼留言