Pink 發問時間: 電腦與網際網路程式設計 · 1 0 年前

call-by-value or reference

請問這兩者對於函式執行完成後對原變數有何影響?

我知道call by value不會改變原變數值是嗎?

那call by reference呢?

2 個解答

評分
  • 1 0 年前
    最佳解答

    call by reference會改變數值。

    void fun(int& a,int& b)

    {......}

    void main()

    {

    ....

    fun(a1,b1);

    }

    =>上面這段程式會改變a1變數和b1變數的數值。

    其實這個概念和函數的參數傳遞和變數生命週期有關。

    我們先以call by value來說:

    =>當你的函數是使用call by value時,函數本身會有個暫存器會去把你想要傳進去的數值,copy到函數自身所擁有的暫存器,然後再依你函數的運算去做運算,因此,當函數結束後,依照變數生命週期來看,函數本身的暫存器會做一個"釋放"的動作,所以就不會改變到上例中,a1和b1變數裡的數值。

    call by reference:

    =>call by reference的函數,函數暫存器的參數a和參數b會用一種"定址"的方式去指向變數a1和b1(請把它想成"鬼附身"),所以當參數a或參數b做值的更動時,變數a1或b1也會受到直接的影響。

    建議你在研究call by reference的時候,也看一下書上"指標"那個章節,會對你有更大的幫助。

    參考資料: myself
  • Thomas
    Lv 6
    1 0 年前

    call by address 是 call by reference 的 variant

還有問題?馬上發問,尋求解答。