cccchenn 2022-03-15 08:36 采纳率: 0%
浏览 41

C语言函数传参问题1

void test(int a,int b,int c)
printf( "%d ,%d,%dln",a,b,c);

int main( )

int a=1;

test(a++,++a,a++);

return 0;

为什么最后输出结果为 3 4 1
老哥们可以帮解释一下吗

  • 写回答

3条回答 默认 最新

  • 关注

    传参时从右往左依次传入,对于a++和++a是先加与后加的区别,但是在参数处理上则对应。如果是a++那么表示符合从右向左处理的前提下,当即处理该参数。如果是++a,那么表示只是执行++a运算并不将结果作为参数结果,将参数位置压入堆栈,只有当所有参数从右向左处理完毕之后,从堆栈弹出所有因为延后操作语句而没有填入最终结果的参数位置,将最终执行的结果a,作为相应的参数值,填入进去。

    a++ 先使用再自加,c=1 a加一变成2
    ++a 先自加再使用, a加一变成3,参数位置压入堆栈
    a++ 先使用再自加,a=3
    加一变成4
    所有处理完毕,由于延后操作语句而没有填入最终结果的参数位置也就是b=4

    评论

报告相同问题?

问题事件

  • 创建了问题 3月15日

悬赏问题

  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal