形參與實參(1)------函式形參與區域性變數在記憶體中的處理
首先,實現一個“交換兩個整形變數的值”的函式。
由結果可知,這樣做並不能真正完成交換資料,手工分析如下:
由上圖可見,Exchange()函式並沒有更改main()函式中num1和num2的值。
在記憶體中的解釋如下:
解釋:先將主函式中的變數入棧(這個棧,指的是:作業系統記憶體管理角度的”系統堆疊“),
執行過程:先將num1入棧,再將變數num2入棧,執行Exchange()函式之前,要進行現場保護,即,將主函式現場資訊入棧,再進入Exchange()函式,先將變數another入棧,再將one入棧(被調函式引數從右向左開始入棧),同時進行int one = num1;int another = num2;賦值操作,最後將temp入棧,同時也要儲存Exchange()函式在執行時的棧頂指標。當Exchange()函式執行完畢後,棧頂指標迴歸到主函式現場資訊處,繼續主函式的執行。
完成真正的交換:
結果如下:
手工分析如下:
在記憶體中的解釋如下:
解釋:如同上面所說的一樣,先入棧,只不過這塊牽扯對所指向的空間進行操作。
對函式形參實參的理解到這,後續還會有有關係統堆疊、系統堆的知識,以及執行過程。
歡迎指正,共同討論。
相關推薦
形參與實參(1)------函式形參與區域性變數在記憶體中的處理
首先,實現一個“交換兩個整形變數的值”的函式。由結果可知,這樣做並不能真正完成交換資料,手工分析如下:由上圖可見,Exchange()函式並沒有更改main()函式中num1和num2的值。在記憶體中的解釋如下:解釋:先將主函式中的變數入棧(這個棧,指的是:作業系統記憶體管理
多線程簡單實例(1)真的需要synchronized麽?
寫入 clas name rac pac bsp 得到 鎖定 lock 說道多線程的安全問題,很多人想到就就是加鎖。用到synchronized關鍵字。 那就要先說說synchronized問什麽能夠保證線程安全了。 首先要了解線程的工作方式:線程工作分為工作內存和主內存。
頁面跳轉傳參(1)
背景: 跳轉前程式碼:未顯示藍色字型以及點選無效 columns: [ {key: 'licPltNo', title: '車牌號', width: 80, fixed: 'left'}, …………
逆向學習筆記(1)函式引數
菜雞剛學彙編,總結下。 函式引數傳遞: 分值傳遞和地址傳遞。 值傳遞只是將數複製一份當做引數,壓入堆疊,例如 function(int a,int b) { ... } 呼叫函式前的彙編程式碼是 mov eax,dword ptr ds:[.
高等數學學習(1)-函式
1.1實數1.1.1 集合具有某種屬性的事務的全體成為集合集合的表示方法:1)列舉法(列出每一個元素);2)說明法(說明元素共有的特性,這種說明需要能概括所有的元素,且不能包含其他元素)。1.1.2 實數集(1)實數集R:有理數集(R)+無理數集(2)有理數特性:1)有序性(
python實操(1):搜尋指定目錄(檔案)下包含指定字串的檔案,及行號
#!/usr/bin/python #encoding:utf-8 # Filename : findString.py #author by :morespeech #python2.7 #platform:pycharm import os import re c
postgresql+postgis+pgrouting實現最短路徑查詢(1)---線數據的處理和建立拓撲
分享圖片 date table 函數 top pda sql pos ima 1、ALTER TABLE beijing_line ADD COLUMN source integer; ALTER TABLE beijing_line ADD COLUMN target
長短期記憶(LSTM)系列_LSTM的資料準備(1)——如何重塑Keras中長短期記憶體網路的輸入資料
LSTM輸入層 LSTM輸入層由網路的第一個隱藏層上的“ input_shape ”引數指定。 這會讓初學者感到困惑。 例如,下面是具有一個隱藏的LSTM層和一個密集輸出層的網路的示例。 model = Sequential() model.add(LSTM(
(1)Python基礎語法和變數型別
一、python基礎語法 Tips: 指令碼開頭注意事項: #!/usr/bin/python 呼叫python自有得編輯器 #_*_ coding:UTF-8 _*_ 防止中文編碼錯誤 識別符號注意事項: 必須以字母、數字、下劃線組成,且不能以數字開
Js事件詳解(1)事件型別及幾種新增事件處理程式的方法
js中的事件 早期的事件流的兩種解決方案: 1.IE:事件冒泡流 即事件開始時由最具體的元素(DOM中層次最深的那個節點)接收,然後逐級向上傳播到較為不具體的節點(文件)–自下向上。 所有現代的瀏覽器都支援事件冒泡。 2.Netscape Co
JAVA基礎23-多執行緒(二)【執行緒區域性變數和未捕獲異常處理器】
一、執行緒區域性變數 線上程中使用共享變數肯定是存在風險。為了規避這個風險,利用同步機制,volatile這些方法都可以。但是也可為每個執行緒分配一個變數。使用ThreadLocal輔助類為各個執行緒提供各自的例項。 ThreadLocal為每個使用
Pyhton函數篇(一)之函數中的形參與實參
依然 tell 多個 存在 默認 urn 字符串 div 地址 1:什麽是函數 函數其實就是帶名字的代碼塊,用於完成一些具體的工作。如果我們在寫一段程序的時候,需要多次用到同樣的一個功能,如果每次都要重復寫相同的代碼,不僅會增加我們的代碼量,更會讓我們寫出的代碼讓別人看
鏈式呼叫 小例項(附推導過程,關聯到 物件、 鏈式呼叫 、 函式執行 、 函式返回、形參實參、undefined)
var foo=function(m,n){ console.log(n); return{ foo:function(o){ console.log(o);
C++中的const限定符(5)——const形參和實參
1、當形參有頂層const時,傳給它常量物件或非常量物件都是可以的,這一點複合之前所說的,因為形參的初始值是拷貝了實參的。 2、在定義過載函式時,需要注意:對於形參是否是const的,是無法被編譯器所區分的。 void foo(int i){} void foo(co
第四周(預設建構函式 無參為1)
/* *copyright(c) 2014,煙臺大學計算機學院 *All rights reserved。 *檔名稱:第四周(三角形) *作者:王忠 *完成日期:2015.4.1 *版本號:v1.0 * *問題描述:輸入三角形三條邊長,求出面積 周長 *輸入描述:輸入三角形
Android Studio檢視函式(方法)的形參列表,返回值,以及提示資訊
在Eclipse中,當我們需要使用某個函式(方法)時,滑鼠移到對應的函式(方法)上,就會自動有一個懸 浮窗提示該函式的說明(所包含的引數含義,該方法功能)。 在Android Studio中,滑鼠移到
習題 9.8 修改第6題的程式,增加一個fun函式,改寫main函式。改為在fun函式中呼叫change和display函式。在fun函式中使用物件的引用(Student &)作為形參。
C++程式設計(第三版) 譚浩強 習題9.8 個人設計 習題 9.8 修改第6題的程式,增加一個fun函式,改寫main函式。改為在fun函式中呼叫change和display函式。在fun函式中
函式呼叫時的形參與實參
大多數人在進行學習程式設計時,對於函式呼叫時函式時的傳遞的內容是一個頭大的問題。本人在學習後有了以下的見解請大家共同學習,若有失誤,請指出!基礎知識1.系統堆疊(即棧區域)和堆區域。 1.1、棧(Stack)是作業系統在建立某個程序時或者執行緒(在支援多
Javascript函式形參與實參
形參,是在定義函式時使用的引數,目的是用來接收呼叫該函式時傳進來的實際引數。 實參:是在呼叫時傳遞給函式的引數 例如 function myfun(a,b,c){ ... } myfun(1,2,3); 這裡a,b,c就是形參。1,2,3為實
關於形參與實參
tro logs ios clas ron ret turn 參與 輸出結果 #include<iostream> using namespace std; void updateStruct(int number) { number++; }