全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C语言中函数参数的入栈顺序详解及实例

C语言中函数参数的入栈顺序详解及实例

对技术执着的人,比如说我,往往对一些问题,不仅想做到“知其然”,还想做到“知其所以然”。C语言可谓博大精深,即使我已经有多年的开发经验,可还是有许多问题不知其所以然。某天某地某人问我,C语言中函数参数的入栈顺序如何?从右至左,我随口回答。为什么是从右至左呢?我终究没有给出合理的解释。于是,只好做了个作业,于是有了这篇小博文。

#include

void foo(int x, int y, int z)
{
    printf("x = %d at [%X]n", x, &x);
    printf("y = %d at [%X]n", y, &y);
    printf("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语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如VisualC++。即然两种方式都可以,为什么C语言要选择从右至左呢?

进一步发现,Pascal语言不支持可变长参数,而C语言支持这种特色,正是这个原因使得C语言函数参数入栈顺序为从右至左。具体原因为:C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。

因此,C语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。换句话说,如果不支持这个特色,C语言完全和Pascal一样,采用自左向右的参数入栈方式

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C函数参数的入栈顺序  # C函数参数的入栈顺序介绍  # C函数参数的入栈顺序实例代码  # C语言可变参数与函数参数的内存对齐详解  # C语言main()函数的参数问题详解  # C语言 函数缺省参数详情  # C语言可变参数函数详解  # C语言的可变参数函数实现详解  # C语言函数的参数使用指针  # C语言中编写可变参数函数  # C语言深入讲解函数参数的使用  # 是从  # 不支持  # 的人  # 变长  # 不知其所以然  # 还可以  # 是有  # 则是  # 两种  # 问我  # 说我  # 希望能  # 博大精深  # 还想  # 什么呢  # 主要原因  # 这篇  # 不确定  # 谢谢大家  # 想做 


相关文章: 韩国服务器如何优化跨境访问实现高效连接?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  建站之星展会模版如何一键下载生成?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  建站主机选哪家性价比最高?  广德云建站网站建设方案与建站流程优化指南  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  宿州网站制作公司兴策,安徽省低保查询网站?  为什么Go需要go mod文件_Go go mod文件作用说明  如何在IIS中新建站点并配置端口与物理路径?  制作网站怎么制作,*游戏网站怎么搭建?  高端企业智能建站程序:SEO优化与响应式模板定制开发  油猴 教程,油猴搜脚本为什么会网页无法显示?  深圳网站制作案例,网页的相关名词有哪些?  PHP正则匹配日期和时间(时间戳转换)的实例代码  宝塔建站后网页无法访问如何解决?  宝塔面板如何快速创建新站点?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  全景视频制作网站有哪些,全景图怎么做成网页?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何用y主机助手快速搭建网站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  ,制作一个手机app网站要多少钱?  如何选择最佳自助建站系统?快速指南解析优劣  如何在Windows环境下新建FTP站点并设置权限?  如何制作算命网站,怎么注册算命网站?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何快速搭建自助建站会员专属系统?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  建站上市公司网站建设方案与SEO优化服务定制指南  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  简历在线制作网站免费版,如何创建个人简历?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  建站之星会员如何解锁更多建站功能?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  公司网站设计制作厂家,怎么创建自己的一个网站?  ,交易猫的商品怎么发布到网站上去?  如何用PHP快速搭建CMS系统?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  如何快速启动建站代理加盟业务?  建站之星客服服务时间及联系方式如何?  如何在云主机上快速搭建网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  实现虚拟支付需哪些建站技术支撑? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。