xupan7764 发表于 2017-4-22 16:42:23

怎么这个程序运行结果是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啊。

mdyuan 发表于 2017-4-22 19:44:05

对于从右往左算(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);

xupan7764 发表于 2017-4-22 21:20:11

mdyuan 发表于 2017-4-22 19:44
对于从右往左算(i++)的右结合性理解有误,就f(i,i++)来说,应该是先代入a=i, a=2,b=i++,先使用i,i然后自 ...

兄弟,你这样说的话那你就是按照从左往右的左结合性算的吧

hq123200 发表于 2017-4-24 07:15:23

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]
查看完整版本: 怎么这个程序运行结果是0呢?怎么不为1?求解决啊各位