C 中的傳值 傳引用

2022-10-10 15:45:11 字數 704 閱讀 7139

在c#中預設是按值傳遞,什麼是按值傳遞呢?我們都知道,在引數傳遞過程中,形參和實參占有不同位置的儲存空間,被呼叫過程在執行過程中,改變了形參的值,但不會影響呼叫過程(主調過程)的實參值。所以,當被呼叫過程執行結束返回到呼叫過程,實參還是呼叫之前的值。因此為了保護實參不受被呼叫過程的影響,應選用按值傳遞引數方式。

說理論有些抽象,讓我用個簡單的swap函式給大家說明下吧。

class program

static void swap(double x, double y)

} 輸出結果:

通過結果可以發現,a、b的值只在被呼叫過程中發生改變,在回到主呼叫過程中後未發生改變。

接著說按引用傳遞。在c#中按引用傳遞需加上關鍵字ref。所謂按引用傳遞就是當呼叫乙個過程時,是把實參變數的記憶體位址傳遞給被呼叫過程的形參,也就是說形參和實參使用相同位址的記憶體單元。因此在被呼叫過程中改變形參的值,就等於改變了實參的值。

還是讓我們用例子來說明問題吧。還是上面的例子,我稍加修改。

class program

static void swap(ref double x, ref double y)

}   

輸出結果:   

只是多了個ref,結果就正好相反,這就是**的神奇之處。

其實概括起來就一句話,按值傳遞,形參不改變實參;按引用傳遞,形參改變實參。

希望能對大家有幫助。

C 中的傳值 傳引用

在c 中預設是按值傳遞,什麼是按值傳遞呢?我們都知道,在引數傳遞過程中,形參和實參占有不同位置的儲存空間,被呼叫過程在執行過程中,改變了形參的值,但不會影響呼叫過程 主調過程 的實參值。所以,當被呼叫過程執行結束返回到呼叫過程,實參還是呼叫之前的值。因此為了保護實參不受被呼叫過程的影響,應選用按值傳...

C 中傳值,傳指標,傳引用的區別

自 當呼叫函式時,傳遞的引數有傳值 傳指標 傳引用這三種形式。直接傳值是直接開闢了乙個跟主函式實參一樣的空間 位址不一樣 裡面存放了了跟實參一樣大小的值,就相當於數值大小相同但是位置不同。你在這個呼叫函式裡使用這個一樣大小的值,完全不影響主函式實參的值。就好比主函式的空間就是一棟樓,裡面的乙個房間裡...

傳值 傳值引用

首先對傳值和傳引用要有個基本的概念 傳值 傳遞的是值的副本。方法中對副本的修改,不會影響到呼叫方。傳引用 傳遞的是引用的副本,共用乙個記憶體,會影響到呼叫方。此時,形參和實參指向同乙個記憶體位址。對引用副本本身 物件位址 的修改,如設定為null,重新指向其他物件,不會影響到呼叫方。直接上 更好的理...