怎么这个程序运行结果是0呢?怎么不为1?求解决啊各位
(小甲鱼老师视频中的题目)具体程序是这样的:#include <stdio.h>
int f(int ,int );
void main()
{
int i=2,p;
p=f(i,i++);
printf("%d",p);
}
int f(int a,int b)
{
int c;
if(a>b)
{c=1;}
else if(a==b)
{
c=0;
}
else
{
c=-1;
}
return c;
}
我是这样想的:对于f(i,i++),应该从右往左算,i先把2传给b再自加,然后算到左边i应该变成3然后传给a了啊,所以a>b,结果应该为1啊。 对于从右往左算(i++)的右结合性理解有误,就f(i,i++)来说,应该是先代入a=i, a=2,b=i++,先使用i,i然后自加1,所以b=2。故a=b, i=3.
i++ :先在i所在的表达式中使用i的当前值,后让i加1;
++i :让i先加1,然后在i所在的表达式中使用i的新值
对于这种情况,就要多注意了: j=(++i)+(++i)+(++i); mdyuan 发表于 2017-4-22 19:44
对于从右往左算(i++)的右结合性理解有误,就f(i,i++)来说,应该是先代入a=i, a=2,b=i++,先使用i,i然后自 ...
兄弟,你这样说的话那你就是按照从左往右的左结合性算的吧 int f(int a,int b)
{
int c;
if(a>++b)
{c=1;}
else if(a==b)
{
c=0;
}
else
{
c=-1;
}
return c;
}
改成if(a>++b)即可
页:
[1]