- 7
- 0
- 约5.75千字
- 约 7页
- 2019-09-14 发布于广东
- 举报
C语言中函数参数入栈的顺序
先通过一个小程序來看一看:
# in elude
void foo(int x, int y, int z)
printf(x =
%d at [%X]n, x, x);
printf(y =
%d at [%X]nn, y, y);
prin tf(z =
%d at [%X]n, z, z);
int main(int argc, char *argv[])
foo(100, 200, 300);
return 0;
运行结果:
x = 100 at [BFE28760]
y = 200 at [BFE28764]
z = 300 at [BFE28768]
C程序栈底为高地址,栈顶为低地址,因此上面的实例可以说明函数参数入栈顺序的确是从 右至左的。可到底为什么呢?杳了一玄些文献得知,参数入栈顺序是和具体编译器实现相关 的。比如,Pascal语言屮参数就是从左到右入栈的,有些语言屮还可以通过修饰符进行指 定,如Visual C+ + .即然两种方式都可以,为什么C语言要选择从右至左呢?
进一步发现,Pascal语言不支持可变长参数,而C语言支持这种特色,正是这个原因使得 C语言函数参数入栈顺序为从右至左。具体原因为:C方式参数入栈顺序(从右至左)的好处 就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压 在栈底。除非知
原创力文档

文档评论(0)