C C 語言函式中引數的入棧順序

2021-08-19 23:35:34 字數 603 閱讀 8061

對於函式,之前認為會用就行了,對其中的原理並不是很了解,就比如函式中引數的入棧順序(在這說明一下,函式的引數是儲存在棧中的,還有一些區域性變數也是存放在棧中),這個問題**於某網際網路的面試題,當然答得很不好,查了很多大牛的部落格做一下總結。

#include using namespace std;

void foo(int x,int y,int z)

int main()

首先可以看出引數x,y,z 的位址從低到高,而棧的位址分配是從高到低,從而可以看出引數的入棧順序使從右向左的,不過為什麼要這樣設計呢?通過檢視各位大牛寫的部落格,自己做了一下總結:引數從右往左的入棧順序的好處可以動態變化引數個數。如果自左向右的入棧方式,最前面的引數被壓在棧底,除非知道引數個數,否則是無法通過棧指標的相對位移求得最左邊的引數,這樣就變成了最左邊引數的個數不確定,正好和動態引數個數的方向相反。而這樣設計的目的主要也是為了支援可變長引數形式。

不過在此我也提出一點疑問:這個是怎麼支援動態變化引數的個數呢?可能提問的問題有點描述不清,還請見諒

選出乙個確定的引數,確定引數型別,定位後續的引數

簡單簡述一下,具體見鏈結

附上大牛解析:

可變引數

c c 中入棧順序

c c 中的都是從右往左入棧的,在呼叫函式時,若引數需要運算則先運算,然 棧,再呼叫函式。程式中棧頂在低位,棧低在高位。程式入棧順序 void push int a,int b,int c 先入棧的在棧底,應該儲存在高位 棧的在棧頂,應該儲存在低位。位置順序 c b a 所以 c最先入棧,a最 棧 ...

語言中函式引數的入棧順序

對技術執著的人,比如說我,往往對一些問題,不僅想做到 知其然 還想做到 知其所以然 語言可謂博大精深,即使我已經有多年的開發經驗,可還是有許多問題不知其所以然。某天某地某人問我,語言中函式引數的入棧順序如何?從右至左,我隨口回答。為什麼是從右至左呢?我終究沒有給出合理的解釋。於是,只好做了個作業,於...

語言中函式引數的入棧順序

對技術執著的人,比如說我,往往對一些問題,不僅想做到 知其然 還想做到 知其所以然 語言可謂博大精深,即使我已經有多年的開發經驗,可還是有許多問題不知其所以然。某天某地某人問我,語言中函式引數的入棧順序如何?從右至左,我隨口回答。為什麼是從右至左呢?我終究沒有給出合理的解釋。於是,只好做了個作業,於...