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
老哥们可以帮解释一下吗
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
老哥们可以帮解释一下吗
传参时从右往左依次传入,对于a++和++a是先加与后加的区别,但是在参数处理上则对应。如果是a++那么表示符合从右向左处理的前提下,当即处理该参数。如果是++a,那么表示只是执行++a运算并不将结果作为参数结果,将参数位置压入堆栈,只有当所有参数从右向左处理完毕之后,从堆栈弹出所有因为延后操作语句而没有填入最终结果的参数位置,将最终执行的结果a,作为相应的参数值,填入进去。
a++ 先使用再自加,c=1 a加一变成2
++a 先自加再使用, a加一变成3,参数位置压入堆栈
a++ 先使用再自加,a=3
加一变成4
所有处理完毕,由于延后操作语句而没有填入最终结果的参数位置也就是b=4