1. 程式人生 > >形參與實參(1)------函式形參與區域性變數在記憶體中的處理

形參與實參(1)------函式形參與區域性變數在記憶體中的處理

首先,實現一個“交換兩個整形變數的值”的函式。



由結果可知,這樣做並不能真正完成交換資料,手工分析如下:


由上圖可見,Exchange()函式並沒有更改main()函式中num1和num2的值。

在記憶體中的解釋如下:


解釋:先將主函式中的變數入棧(這個棧,指的是:作業系統記憶體管理角度的”系統堆疊“),

執行過程:先將num1入棧,再將變數num2入棧,執行Exchange()函式之前,要進行現場保護,即,將主函式現場資訊入棧,再進入Exchange()函式,先將變數another入棧,再將one入棧(被調函式引數從右向左開始入棧),同時進行int one = num1;int another = num2;賦值操作,最後將temp入棧,同時也要儲存Exchange()函式在執行時的棧頂指標。當Exchange()函式執行完畢後,棧頂指標迴歸到主函式現場資訊處,繼續主函式的執行。

完成真正的交換:



結果如下:


手工分析如下:


在記憶體中的解釋如下:


解釋:如同上面所說的一樣,先入棧,只不過這塊牽扯對所指向的空間進行操作。

對函式形參實參的理解到這,後續還會有有關係統堆疊、系統堆的知識,以及執行過程。

歡迎指正,共同討論。