本文主要是介绍C/C++语言函数中参数的入栈顺序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对于函数,之前认为会用就行了,对其中的原理并不是很了解,就比如函数中参数的入栈顺序(在这说明一下,函数的参数是保存在栈中的,还有一些局部变量也是存放在栈中),这个问题来源于某互联网的面试题,当然答得很不好,查了很多大牛的博客做一下总结。
#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);
}
首先可以看出参数x,y,z 的地址从低到高,而栈的地址分配是从高到低,从而可以看出参数的入栈顺序使从右向左的,不过为什么要这样设计呢?通过查看各位大牛写的博客,自己做了一下总结:参数从右往左的入栈顺序的好处可以动态变化参数个数。如果自左向右的入栈方式,最前面的参数被压在栈底,除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数,这样就变成了最左边参数的个数不确定,正好和动态参数个数的方向相反。而这样设计的目的主要也是为了支持可变长参数形式。
不过在此我也提出一点疑问:这个是怎么支持动态变化参数的个数呢?可能提问的问题有点描述不清,还请见谅
选出一个确定的参数,确定参数类型,定位后续的参数
简单简述一下,具体见
这篇关于C/C++语言函数中参数的入栈顺序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!