鱼C论坛

 找回密码
 立即注册
查看: 6025|回复: 3

[已解决]怎么这个程序运行结果是0呢?怎么不为1?求解决啊各位

[复制链接]
发表于 2017-4-22 16:42:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(小甲鱼老师视频中的题目)具体程序是这样的:
#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啊。
最佳答案
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);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

兄弟,你这样说的话那你就是按照从左往右的左结合性算的吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-22 23:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表