c语言函数参数处理顺序

我们先来看第一个例子

#include<stdio.h>

 void fun(int a,int b,int c)

 {

  printf("%d,%d,%d", a, b, c);

 }

 void main()

 {

     int a = 3;

  fun(a++, a++, a++);

 }

输出:5,4,3

得出结论:函数参数是从右往左入栈的。

那么为什么是从右往左呢,那是因为c语言有可变参数的功能。C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数,C语言中可变参数都是从左到右,所以不管你有多少个参数反正将最右面的那个压入栈底,最左面的参数出入栈顶。

第二个例子:

 #include<stdio.h>

 int main(void)

 {

  int i = 0;

  printf("%d,%d,%d,%d,%d\n", ++i, ++i, i++, ++i, i++);

 }

  输出结果:

  5,5,2,5,0

原因如下:

       首先执行顺序是从右向左执行的。先处理i++,在处理后面的。如果是i++那么表示符合从右向左处理的前提下,当即处理该参数。如果是++i,那么表示只是执行++i运算并不将结果作为参数结果,将参数位置压入堆栈,只有当所有参数从右向左处理完毕之后,从堆栈弹出所有因为延后操作语句而没有填入最终结果的参数位置,将最终执行的结果i,作为相应的参数值,填入进去。

第三个例子:

int a = 3,b = 5,c;

c = a>b,a+b;     //c = 0

原因:都好运算符的优先级低于赋值运算符,所以先将a>b 值为0的值给c,之后进行a+b运算,结果不保存

c = (a>b,a+b)   // c= 8

原因:因为括号的优先级高于赋值运算符,所以先算括号内的表达式,此时计算结果为最后一个表达式的值,即a+b

现在大家知道了,逗号运算符,逗号运算的结合性是从左至右,完毕之后整个表达式的值是最后一个表达式的值。



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值