C语言中函数参数入栈的顺序.docxVIP

  • 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)

1亿VIP精品文档

相关文档