请问以下程序的输出结果

来源:百度知道 编辑:UC知道 时间:2024/05/27 00:18:30
f(int a)
{
static c=0;
c=a+c++;/*看不懂了*/
return(c);
}
main()
{ int a=2,i,k;
for(i=0;i<2;i++;)
k=f(a++);/*到底传的是a++还是a的值*/
printf("%d\n",k);
}

请详细解释一下,谢谢!

c=0
c=a+ c++ (c++ 此时C=1)

k=f(a++); a=2 所以 k=f(3);

a=a+c++;是将a+c++的值赋给a,第一次c为0,第二次c就自加1为1,由于for循环执行了两次f函数,所以c=1;
k=f(a++);同样的道理,第一次a=2;第二次a=3;for循环的原因,a=3;

至于a++与c++,由于是后缀++,先使用a或c的值,再自加1,下次使用a或c的值时就变成了加1后的值;
而++a和++c这种前缀++,先自加1,再使用,实际上使用的是自加1后的值!

c=a+c++;/*看不懂了*/
等价于:c=a+c;c++;

k=f(a++);/*到底传的是a++还是a的值*/
等价于:k=f(a);a++;

c=a+(++c);/*看不懂了*/
等价于:c++;c=a+c;

k=f(++a);/*到底传的是a++还是a的值*/
等价于:a++;k=f(a);