C/C++语言函数中参数的入栈顺序

对于函数,之前认为会用就行了,对其中的原理并不是很了解,就比如函数中参数的入栈顺序(在这说明一下,函数的参数是保存在栈中的,还有一些局部变量也是存放在栈中),这个问题来源于某互联网的面试题,当然答得很不好,查了很多大牛的博客做一下总结。

#include <iostream>
using namespace std;
void foo(int x,int y,int z){
    cout << &x << endl; //  0x28ff10
    cout << &y << endl; //  0x28ff14
    cout << &z << endl; //  0x28ff18
}

int main(){
    foo(1,2,3);
}

首先可以看出参数x,y,z 的地址从低到高,而栈的地址分配是从高到低,从而可以看出参数的入栈顺序使从右向左的,不过为什么要这样设计呢?通过查看各位大牛写的博客,自己做了一下总结:参数从右往左的入栈顺序的好处可以动态变化参数个数。如果自左向右的入栈方式,最前面的参数被压在栈底,除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数,这样就变成了最左边参数的个数不确定,正好和动态参数个数的方向相反。而这样设计的目的主要也是为了支持可变长参数形式。

不过在此我也提出一点疑问:这个是怎么支持动态变化参数的个数呢?可能提问的问题有点描述不清,还请见谅

选出一个确定的参数,确定参数类型,定位后续的参数

简单简述一下,具体见链接

附上大牛解析:

https://blog.csdn.net/u014181676/article/details/22103265

https://blog.csdn.net/hnyzyty/article/details/46427219

可变参数

http://www.cnblogs.com/cpoint/p/3368993.html

http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页