如何證明C語言函式引數的轉遞是單值傳遞
阿新 • • 發佈:2019-02-06
朱金燦
在C語言函式使用中函式引數的傳遞是單值轉遞,即把實參傳遞給形參,就是把實參複製一份傳給形參。如何證明這一點呢?我想到了一個方法,就是在呼叫函式和被呼叫函式都輸出實參和形參的地址。如果地址一致那麼就是雙向傳遞,如果地址不一致,就是單向傳遞。
例程如下:
#include <iostream.h>
void Fun(int a,int b)
{
cout<<&a<<endl;
cout<<&b<<endl;
}
int main(void)
{
int a;
int b;
cout<<&a<<endl;
cout<<&b<<endl;
Fun(a,b);
return 0;
}
執行結果如下圖:
現在我們可以清楚地看到,實參和形參的地址不一樣。也就是說當傳值進去時,它們的值是一樣的,但它們的地址不一樣,因此一旦改變形參的值,實參就不能相應地改變。這樣我們也可以更好地理解為什麼傳指標進去可以改變實參的值。其實道理是一樣的。傳指標進去,我們一般不去直接改變指標的值,而是去改變指標所指的值,這樣實際上就是形參和實參的地址是一樣的,改變了形參,實參也作相應的變動。