函数传参之入栈出栈问题

本文探讨C/C++函数传参的入栈和出栈问题。按照_cdecl调用惯例,参数从右向左入栈,从左向右出栈。在add函数结束后,主调函数负责栈上变量的释放。举例说明了参数入栈顺序,并解释了++a、a++和a在函数调用中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码段:

问题1: 参数入栈顺序

问题2: add函数结束时,x,y变量被释放了吗

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int add(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 10, b = 20;
	int c = add(a,b);
	system("pause");
	return 0;
}

1、在主调函数和被调函数之间,要遵循一致的约定,才能保证正确传参被使用,这一约定称之为调用惯例

2、调用惯例

首先明确c程序,栈底为高地址,栈顶为低地址.

在c/c++程序中,默认的调用惯例为_cdecl,即上述被调函数add()的完整表达为:

                                int  _cdecl add (int x, int y)

按照_cdecl调用惯例,参数入栈顺序为从右往左,而出栈顺序刚好相反,正好取参数相匹配.并且由主调函数决定栈变量的存亡.

关于函数名字修饰无须了解.

举个例子:  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值