为啥这两个C程序例子输出的结果不一样

为什么这两个C程序例子输出的结果不一样?
#include<stdio.h>
#include<windows.h>

//Example 1
int main()
{
int a=1,b=0;
printf("%d,",b=a+b);
printf("%d\n",a=2*b);
system("pause");
return 0;
}
//output: 1,2


/**
//Example 2
int main()
{
int a=1,b=0;
printf("%d,%d\n",b=a+b,a=2*b);
system("pause");
return 0;
}
//output: 0,0
**/

------解决方案--------------------
C语言函数调用时,参数是按照从右到左入栈的,因此printf("%d,%d\n",b=a+b,a=2*b)函数调用时,a=2*b先入栈,即先计算2*b,那么 a=0,0入栈,然后b=a+b算出b=0,0再入栈。因此参数是两个0。