c语言堆栈基本代码入栈出栈_[原创]浅谈VC++中C语言函数入栈出栈的实现

近日聆听了在科锐钱老师上C语言时所讲的函数调用约定,于是将课后笔记整理成此处男贴.虽力求完美,但难免因本人的学识浅薄而存在不足之处,望大神们批评指正...

--题记

1 函数调用流程

函数调用大家都不陌生,调用者向被调者传递一些参数,然后执行被调者的函数体代码,最后被调者向调用者返回结果.还有一句话是大家比较熟悉的,就是函数调用是在栈上发生的,那么C语言中的函数调用是如何实现的呢,下面我们一起分析分析...

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

为了能有个感官的认识,我们先通过一个小程序看看.

/*

*Copyright (c)2015,

*All rights reserved.

*文件名称:PushOrder.c

*作 者:韩逸

*完成日期:20161020

*版 本 号:Debug

*编译环境:Visual Studio 2012

*问题描述:C语言函数参数入栈的顺序

*/

#include

int Fun(int nNumA,int nNumB,int nNumC);

int main(int argc,char* argv[])

{

Fun(100,200,300);

return 0;

}

int Fun(int nNumA,int nNumB,int nNumC)

{

printf("nNumA = %d at [0x%p]\r\n",nNumA,&nNumA);

printf("nNumB = %d at [0x%p]\r\n",nNumB,&nNumB);

printf("nNumC = %d at [0x%p]\r\n",nNumC,&nNumC);

return 0;

}

运行结果

nNumA = 100 at [0x010FFDF0]

nNumB = 200 at [0x010FFDF4]

nNumC = 300 at [0x010FFDF8]

总结:

C语言中栈底为高地址,栈顶为低地址,因此可知上述例子函数入栈顺序是从右往左.通过钱老师的讲解以及百度所查到的文献,参数的入栈顺序是和编译器的调用约定相关的.比如,Pascal语言中参数就是从左往右入栈,而有些语言还可以定义修饰符进行置顶的传参顺序,如VC+&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值