C/C++语言函数中参数的入栈顺序
對于函數(shù),之前認(rèn)為會用就行了,對其中的原理并不是很了解,就比如函數(shù)中參數(shù)的入棧順序(在這說明一下,函數(shù)的參數(shù)是保存在棧中的,還有一些局部變量也是存放在棧中),這個問題來源于某互聯(lián)網(wǎng)的面試題,當(dāng)然答得很不好,查了很多大牛的博客做一下總結(jié)。
#include <iostream> using namespace std; void foo(int x,int y,int z){cout << &x << endl; // 0x28ff10cout << &y << endl; // 0x28ff14cout << &z << endl; // 0x28ff18 }int main(){foo(1,2,3); }首先可以看出參數(shù)x,y,z 的地址從低到高,而棧的地址分配是從高到低,從而可以看出參數(shù)的入棧順序使從右向左的,不過為什么要這樣設(shè)計呢?通過查看各位大牛寫的博客,自己做了一下總結(jié):參數(shù)從右往左的入棧順序的好處可以動態(tài)變化參數(shù)個數(shù)。如果自左向右的入棧方式,最前面的參數(shù)被壓在棧底,除非知道參數(shù)個數(shù),否則是無法通過棧指針的相對位移求得最左邊的參數(shù),這樣就變成了最左邊參數(shù)的個數(shù)不確定,正好和動態(tài)參數(shù)個數(shù)的方向相反。而這樣設(shè)計的目的主要也是為了支持可變長參數(shù)形式。
不過在此我也提出一點疑問:這個是怎么支持動態(tài)變化參數(shù)的個數(shù)呢?可能提問的問題有點描述不清,還請見諒
選出一個確定的參數(shù),確定參數(shù)類型,定位后續(xù)的參數(shù)
簡單簡述一下,具體見鏈接
附上大牛解析:
https://blog.csdn.net/u014181676/article/details/22103265
https://blog.csdn.net/hnyzyty/article/details/46427219
可變參數(shù)
http://www.cnblogs.com/cpoint/p/3368993.html
http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html
總結(jié)
以上是生活随笔為你收集整理的C/C++语言函数中参数的入栈顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云服务器被挖矿minerd入侵的解决
- 下一篇: Discuz完整手动迁移教程(不使用备份