- 算法零基礎一本通(Python版)
- 洪錦魁
- 590字
- 2022-07-29 15:07:53
5-4 函數調用與棧運作
計算機語言在執行函數調用時,內部其實是使用棧在運作,下列將以實例做說明。
程序實例ch5_4.py:由函數調用了解程序語言的運作。

執行結果

上述是一個簡單的調用函數程序,接下來我們看這個程序如何應用棧運作。程序第14行調用welcome( )時,計算機內部會以棧方式配置一個內存空間。

當有函數調用時,計算機會將調用的函數名稱與所有相關的變量存儲在內存內,然后進入welcome( )函數。當執行第9行時會輸出“洪錦魁 歡迎進入明志科技大學系統”。當執行第10行時調用system( ),計算機內部會以棧方式配置一個內存空間,同時堆放在前一次調用的welcome( )內存上方。

程序接著執行第6行,輸出“洪錦魁 歡迎進入校友會系統”,然后system( )函數執行結束,此時程序返回welcome( )函數,同時將上方的內存移除,回到welcome( )函數。

上圖有一個很重要的概念是,welcome( )函數執行一半時,工作先暫停但是內存數據仍然保留,先去執行另一個函數system( )。當system( )工作結束時,可以回到welcome( )函數先前暫停的位置繼續往下執行。接著執行第11行輸出“使用明志科技大學系統很棒”。然后執行第12行調用bye( )函數,這個調用沒有傳遞變量,棧內存如下所示:

系統會將bye( )函數新增在棧上方,然后執行第3行輸出“下回見!”,接著bye( )函數執行結束。此時程序返回welcome( )函數,同時將上方的內存移除,回到welcome( )函數。

從調用bye( )到返回welcome( )函數后,由于welcome( )函數也執行結束,所以整個程序就算執行結束了。
推薦閱讀
- JavaScript百煉成仙
- 復雜軟件設計之道:領域驅動設計全面解析與實戰
- Expert Android Programming
- Access 2016數據庫管
- Java程序設計:原理與范例
- Julia高性能科學計算(第2版)
- 基于Struts、Hibernate、Spring架構的Web應用開發
- Cocos2d-x Game Development Blueprints
- Java Web應用開發項目教程
- UML2面向對象分析與設計(第2版)
- 貫通Tomcat開發
- 3D Printing Designs:Octopus Pencil Holder
- Oracle SOA Suite 12c Administrator's Guide
- Neo4j Graph Data Modeling
- C++ Primer(中文版)(第5版)