C語言中參數的傳遞方式

C語言中參數的傳遞方式一般存在兩種方式:一種是通過棧的形式傳遞,另一種是通過寄存器的方式傳遞的。這次,我們只是詳細描述一下第一種參數傳遞方式,另外一種方式在這裏不做詳細介紹。

首先,我們看一下,下面一個簡單的調用例程:

int Add (int a, int b, int c)

{

return a+b+c;

}


void main()

{

int x =0 , y = 1, z = 2;

int result = 0;

result = Add(x, y, z);

printf("Result for x+y+z %d", result);

}

藉助以上例程,我們具體看一下,參數是如何傳遞的。首先,我們瞭解一個知識點,就是“()”操作符在C語言中有很多含義,比如說,結合符、函數調用符等。那麼在result = Add(x,y,z)語句中當然爲函數調用符,因此在編譯階段,遇到函數調用符後的執行序爲,從最後一個參數開始壓棧,壓棧順序爲z->y->x, 直到將全部的參數壓到調用棧中,然後call到Add對應的函數地址開始執行。那麼壓棧執行完成後,棧空間,從上到下依次的順序爲x->y->z(因爲棧的生長方向爲向上,即地址低的地方,因此,x在地址最低的地方,即棧頂)。因此,在被調用函數中參數的讀取和操作也都是發生在棧中的。

更多0
發佈了29 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章