函数入参分析

函数入参分析

背景

一般来说,我们调用一个函数的时候,需要传入对应数据类型和个数的参数,例如调用int sum(int x,int y);我们需要传入两个int类型的数,且只能传入两个int类型的数。如果类型不匹配或者个数不匹配,编译器都会报warning或者error。我们将int x ,int y称作形参,下面就来分析以下参数是怎么传递给被调用函数的。
备注:
测试的平台x86_64-redhat-linux

固定参数

固定参数指的是,一个函数的形参个数是确定的,如上面举例的int sum(int x,int y); 它的参数个数是2,是一个固定值。还有一种参数个数是可变的,例如printf函数,对于可变参数入参在下一节中分析。
大部分的课本或者图书上说,函数入参的顺序是从右往左依次压入栈中,由于栈的增长是由高地址向低地址增长,故可以得知越是靠近右边的参数,所处的地址应该是越大的。例如my_printf(char* fmt,int a,int b,int c),入栈的顺序:c->b->a->fmt(指针),地址的大小也是c->b->a->fmt(指针)。
我写了一个测试程序来验证这个说法,这个测试程序把函数的入参地址打印出来了:

void my_printf(char* fmt,int a,int b,int c)
{
	printf("addr: fmt:%p a:%p b:%p c:%p\n",&fmt,&a,&b,&c);
}

int main()
{
	my_printf("%d&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值