xunalove
「已注销」
采纳率100%
2020-03-10 15:11

c语言中的 int i=10,j=10; printf("%d %d",++i+j++, j--)输出结果是什么?

5
已采纳
  int i=10,j=10;
    printf("%d %d",++i+j++, j--);

输出结果是 20, 10
执行逻辑是什么?怎么得出来的?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • A_zjzj A_zjzj 1年前

    这个printf是用栈实现的,后面的j--先算输出10而j变成9,然后先将i+1再加上j,就是20,然后j再+1变成10

    #include<bits/stdc++.h>
    using namespace std;
    int i,j;
    int main(){
        i=j=10;
        printf("%d %d %d\n",++i+j++,i,j);
        i=j=10;
        printf("%d %d %d\n",++i+j++,i,j+=2);
        i=j=10;
        printf("%d ",++i+j++);//分开输出
        printf("%d ",i);
        printf("%d ",j);
        return 0;
    }
    

    输出结果:
    21 10 10
    23 10 12
    21 11 11

    这样很明显,printf是从后向前执行的

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 1年前

    结果不确定,函数参数的求值顺序是C语言的未定义行为,语言规范没有规定顺序,不同的编译器不能保证输出的结果一致。你可以试不同的编译器,结果不同

    图片说明

    https://blog.csdn.net/chencheng126/article/details/47406597?utm_source=blogxgwz8

    我可以再打一个比方,比如我让你们班上的同学都写一个函数 sum(n),计算1+2+...+n的值

    你写的是
    int sum(int n)
    {int s = 0;
    for (int i = 1; i <= n; i++) s+= i;
    return s;}
    你的同学二狗写的是
    int sum(int n)
    {return (1+n)*n/2;
    }
    这两个程序在n>=1的时候,运算结果一样。
    现在问题来了,当n=-10的时候,你的程序返回10,二狗的程序返回-45。可能铁蛋写的程序返回-1234
    大家的就不一样。
    为什么,因为老师布置题目的时候,没有规定n<1怎么输出,所以结果是什么取决于你的程序怎么写的。
    一个道理,不同的编译器没有考虑这种代码应该输出什么,所以结果五花八门了。

    问题解决的话,请点下采纳。

    点赞 1 评论 复制链接分享
  • Varible Varible 1年前

    C语言每个IDE的库函数不一样,而问题就在于这,一个BUG:自增自减,每个IDE得出的答案都不怎么一样。
    原因是这种自增自减运算在函数运行时会发生混乱,这题答案我认为要么是21、10,要么是无解,因为IDE目前还无法解决这个问题。
    这也揭示了一个道理:写代码最好别用这个。分行写,就会解决。
    好讲解就到这里,记得_采纳_哟!

    点赞 评论 复制链接分享
  • oyyy0130 苦瓜黄瓜金银花 1年前

    答案应该是 21 11
    初始i=10,j=10
    ++i是先计算+1在运算i,j++是先计算j之后再+1
    ++i+j++可以看成是(i+1)+j,j+1,即++i+j++此时i=11,j=11,之后输出j--
    j--是先输出j再让j-1,由于上一个计算式j++,所以最后的输出结果是21 11

    问题解决的话,请点下采纳

    点赞 评论 复制链接分享
  • jiangcheng2016 叫我姜同学 1年前
    我用VC++6.0输出的是 21 10 ,按照逻辑看应该也是21和10
    
    点赞 评论 复制链接分享
  • huotiana huotiana 1年前

    i++,和++i的执行顺序不一样,前者是先输出后加,后者是先加后输出
    ++i应该是11+J++是加上J原本的值10我感觉第一个应该是21
    第二个j--也是输出j原本的值10然后在输出
    我感觉答案应该是 21 10

    点赞 评论 复制链接分享

相关推荐