值傳遞形參不影響實參,那值傳遞的作用是啥?

神奇小Mo


形參在函數定義中使用,只能在函數內部使用,離開函數後就不能使用了。形參相當於函數中的一個局部變量。

實參在函數調用中使用,作用相當於給形參賦值用的,賦完值就跟這個函數沒關係了。

"形參"和"實參"僅僅從名字上來看的話是不好理解它們存在的意義。它倆出現在函數的定義和調用中,也就是說他倆是為函數服務的。那就從函數的生命週期來分析它倆為何這樣存在。

正常情況下,函數是存儲在ROM中。當函數被調用(運行的時候),他就會被轉入到RAM中運行。任何一個函數被調用的時候都是為了實現一定的運算功能。一般的功能都需要有運算數據(也就是實參的數據),運算完成後有運算結果(也就是返回值)。那函數在運行的時候,為什麼不直接操作實參,而是要把實參數據傳遞給形參,函數再去操作形參呢?

那是為了"低耦合性",程序編程思想上有這麼一句話"低耦合,高內聚"。意思就是說函數和函數之間的關係儘量簡單、明確,不要有曖昧關係。這樣做就是為了提高程序的可閱讀性,可維護性。函數在運行的時候申請一塊RAM區域,在其中也包括形參的空間,並把實參的數據給到形參。

函數也只是操作形參,不操作實參,這樣就和實參扯清關係了,等到函數死掉(從RAM中釋放)的時候,就不需要再管實參的關係了,可以直接把函數調用時申請的RAM全部清空,簡單高效,同時返回值也與此類似。

形參是函數的入口,返回值是函數的出口。函數的運行只用自己內部的空間,跟其它任何數據都沒關係,大大提高了"低耦合性"。這就是形參和實參存在的意義。


琪浩電子攻城獅


傳參的作用可不一定就是為了改變這個參數的值,是由很多其他用處的,例如舉個最簡單的例子。。。

如果你需要一個求和運算,你可以寫一個test(int a, int b){}的方法,用的時候調用這個方法,傳的值是a和b可是運算完了a和b的值沒變,但是返了兩個值的和,正是我想要的。



通信人的自我修養


首先我們要明白,在函數調用的過程中,出現兩種參數。

1.實際參數就是在調用函數的時候給函數傳遞數值的參數。

2.形式參數顧名思義就是在函數定義的時候定義的參數。

值傳遞的過程就是將實際參數傳遞給形式參數的過程,傳遞的是實際參數的複製後的結果,同時不會改變實際參數的數值,形式參數得到數值後開始執行函數的算法內容,執行完成後釋放形參內容。


工控匯


值傳遞和引用傳遞的本質是,傳遞的內容調用者還需不需要。

值傳遞可以認為是函數的入參。函數內部不管怎麼處理這個入參,調用者都不關心,調用者不再需要這個數據,也感知不到這個數據。

引用傳遞可以認為既是入參也是出參。函數內部可以讀引用的數據,也可以修改,如果修改了調用者是可以感知到的。


分享到:


相關文章: