1. 程式人生 > >C語言函式引數傳遞原理

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在地址最低的地方,即棧頂)。因此,在被呼叫函式中引數的讀取和操作也都是發生在棧中的。