1. 程式人生 > >如何證明C語言函式引數的轉遞是單值傳遞

如何證明C語言函式引數的轉遞是單值傳遞

                                                                               朱金燦

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;

}

執行結果如下圖:

現在我們可以清楚地看到,實參和形參的地址不一樣。也就是說當傳值進去時,它們的值是一樣的,但它們的地址不一樣,因此一旦改變形參的值,實參就不能相應地改變。這樣我們也可以更好地理解為什麼傳指標進去可以改變實參的值。其實道理是一樣的。傳指標進去,我們一般不去直接改變指標的值,而是去改變指標所指的值,這樣實際上就是形參和實參的地址是一樣的,改變了形參,實參也作相應的變動。