AARiors 发表于 2020-2-10 22:34:03

i++的问题

#include<stdio.h>
int main()
{
        int i=5;
        printf("%d\n%d\n%d\n",i,--i,++i);
}

得出来的5 5 5,为什么呀,i++的概念我是懂的

#include<stdio.h>
int main()
{
        int i=5;
        printf("%d\n%d\n",i,--i,);
}

而这个就是4 4
求助!!!谢谢!!!

Sun正气 发表于 2020-2-10 22:51:47

--i ++i 运行后,才运行的输出语句。 这样的语句,后面的命令先运行,输出的命令最后运行的。

Sun正气 发表于 2020-2-10 22:53:04

有些语句在不同的编译器运行的顺序是不一样的,很多细节要注意,我也不是很清楚这俩的不同,你主要用什么编译器就记住这个编译器的一些运行结果,然后写程序注意就行了。

大肥侃子 发表于 2020-2-11 00:25:30

本帖最后由 大肥侃子 于 2020-2-11 00:27 编辑

解释来说就是++i是立即对i这个变量自增,i++是在读取了所在行的代码之后才自增(小甲鱼经常说的"i++在下一条有i的语句才会实现"),简单的例子:{:10_271:}
#include <stdio.h>

int main()
{
    int i, n, m;
    i = 5;
    n = i++;
    printf("n = %d, i = %d\n", n, i);

    i = 5;
    m = ++i;
    printf("m = %d, i = %d\n", m, i);

    return 0;
}

SHRS23 发表于 2020-2-11 00:31:21

这种情况问题不是出在 ++ -- 上,而是出在printf函数上
在printf函数中的表达式不是按照从左到右的顺序依次计算的。
参考:
https://blog.csdn.net/kwinway/article/details/80175058
https://stackoverflow.com/questions/1270370/printfd-d-d-n-a-a-a-output

这两个参考网页都谈到了这个问题,但是解释的顺序不太一样,
想深入了解的话还是去查一下C语言printf函数的文档吧。

避免这种头疼的事情的方法很简单,把计算的内容全放在printf外面

#include<stdio.h>
int main()
{
      int i=5;
      int a = i;
      int b = --i;
      int c = ++i;
      printf("%d\n%d\n%d\n",a,b,c);   
}

代码仅用于说明问题,实际程序不建议混合使用 i++ ++i

大肥侃子 发表于 2020-2-11 00:55:45

SHRS23 发表于 2020-2-11 00:31
这种情况问题不是出在 ++ -- 上,而是出在printf函数上
在printf函数中的表达式不是按照从左到右的顺序依 ...

{:10_287:}还是前辈讲得好

SHRS23 发表于 2020-2-11 10:28:16

大肥侃子 发表于 2020-2-11 00:55
还是前辈讲得好

这。。这。。你这头像我怀疑咱俩认识{:10_277:}{:10_277:}

莫谦 发表于 2020-2-11 10:53:41

#include<stdio.h>
int main()
{
      int i=5;
      printf("%d\n%d\n%d\n",i,--i,++i);
}
得出来的时556
printf函数中参数的计算顺序是从右至左
因此,得出来的时556
后面的一个的出来得答案类似

大肥侃子 发表于 2020-2-11 13:27:59

SHRS23 发表于 2020-2-11 10:28
这。。这。。你这头像我怀疑咱俩认识

{:10_307:}不不尼想太多啦我只是个小萌新

4goodworld 发表于 2020-2-11 15:48:52

今天我看了几个类似++ --的问题,我个人的感觉,首先是编译器的选择会影响结果
其次,我个人的感觉是
printf("%d\n%d\n%d\n",i,--i,++i);

printf("%d\n%d\n",i,--i,);

同样的效果,结果会不一样
我是这么粗俗的理解
我感觉编译器会以最后一个i为最后的基数
那么
printf("%d\n%d\n%d\n",i,--i,++i);
i=5
--i,i=4
++i,i=5
所以 最后一个i是5(此5非开始定义的5),返回都是5
同理
printf("%d\n%d\n",i,--i,);
i=5
--i,i=4
所以 最后一个i是4,返回都是4
建议反编译看下代码

Croper 发表于 2020-2-11 16:38:15

一直都有人问这个问题,麻烦学会搜索
https://fishc.com.cn/thread-132932-1-1.html
https://fishc.com.cn/thread-152900-1-1.html

拖延症大叔 发表于 2020-2-14 00:08:53

大肥侃子 发表于 2020-2-11 13:27
不不尼想太多啦我只是个小萌新

无中生友
页: [1]
查看完整版本: i++的问题