5 陣列位址增長方向和函式呼叫相關問題

2021-08-15 04:06:41 字數 952 閱讀 5771

1、陣列位址增長方向和棧的生長方向是兩個不同的概念。在不同的作業系統中棧的生長方向可能不一樣,有的是向上生長,有的是

向下生長。但是不管是哪種生長方向,陣列定義了之後,在棧中的生長方向都是向上的,如下圖所示:

其中,陣列上的箭頭表示陣列中陣列的首位址位置。

2、具體見下圖,主函式中呼叫fa函式,fa函式中呼叫了fb函式:

3、函式呼叫模型:

(1)在main函式中呼叫fa函式時,在棧中的先是關於main函式的相關資料,作業系統的執行狀態、main函式的返回位址(指的是main函式執行完以後應該返回到**,程式接下來應該執行的部分)以及main函式的引數。當main函式呼叫fa函式時,main函式中斷,棧中要儲存main函式的執行狀態,方便後面中斷恢復時快速回到main函式被中斷前的狀態,然後棧中需要存放fa函式的返回位址(即fa函式呼叫完之後,返回的main函式中的位置,接下來應該執行的main函式的**位址)以及fa函式的引數。

(2)再在fa函式中呼叫fb函式:

(3)當fb執行完之後,要將fb在棧中的相關資料出棧,通過返回位址和fa函式的執行狀態回到fa函式中去,如下圖。後續fa執行完,以及main函式執行完也是類似的,最後,整個程式執行完時,棧中就為空,沒有資料。

關於棧位址的增長方向

include include include include include int main void char str2 16 char p null strncpy str1,build with gcc 4.3 under ubuntu 64bit,2011 7 23 48 strncpy...

實驗5 陣列和函式

實驗任務1 include const int n 3 int main inti printf 通過陣列名及下標直接訪問陣列元素 n for i 0 i printf d d n a i a i printf 通過位址間接訪問陣列元素 n for i 0 i printf d d n a i,a ...

不定引數函式牽扯出來的棧的生長方向和大端小端模式

主題 cpu的架構決定了大端小端模式和棧的生長方向。首先引數從右到左壓棧的方式,這是c語言決定的,比如說pascal就是從左到右壓棧,所以pascal不支援不定引數函式。比如 printf s d d n s,a,b 格式字串是確定存在的,後面的變數都是不確定的或者說不知道有多少個。如果格式字串最後...