鱼C论坛

 找回密码
 立即注册
查看: 1381|回复: 11

[已解决]i++的问题

[复制链接]
发表于 2020-2-10 22:34:03 | 显示全部楼层 |阅读模式

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

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

x
#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
求助!!!谢谢!!!
最佳答案
2020-2-11 00:31:21
这种情况问题不是出在 ++ -- 上,而是出在printf函数上
在printf函数中的表达式不是按照从左到右的顺序依次计算的。
参考:
https://blog.csdn.net/kwinway/article/details/80175058
https://stackoverflow.com/questi ... -d-d-n-a-a-a-output

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

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

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i=5;
  5.         int a = i;
  6.         int b = --i;
  7.         int c = ++i;
  8.         printf("%d\n%d\n%d\n",a,b,c);     
  9. }
复制代码


代码仅用于说明问题,实际程序不建议混合使用 i++ ++i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-10 22:51:47 | 显示全部楼层
--i ++i 运行后,才运行的输出语句。 这样的语句,后面的命令先运行,输出的命令最后运行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 22:53:04 | 显示全部楼层
有些语句在不同的编译器运行的顺序是不一样的,很多细节要注意,我也不是很清楚这俩的不同,你主要用什么编译器就记住这个编译器的一些运行结果,然后写程序注意就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 00:25:30 | 显示全部楼层
本帖最后由 大肥侃子 于 2020-2-11 00:27 编辑

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

  2. int main()
  3. {
  4.     int i, n, m;
  5.     i = 5;
  6.     n = i++;
  7.     printf("n = %d, i = %d\n", n, i);

  8.     i = 5;
  9.     m = ++i;
  10.     printf("m = %d, i = %d\n", m, i);

  11.     return 0;
  12. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 00:31:21 | 显示全部楼层    本楼为最佳答案   
这种情况问题不是出在 ++ -- 上,而是出在printf函数上
在printf函数中的表达式不是按照从左到右的顺序依次计算的。
参考:
https://blog.csdn.net/kwinway/article/details/80175058
https://stackoverflow.com/questi ... -d-d-n-a-a-a-output

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

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

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i=5;
  5.         int a = i;
  6.         int b = --i;
  7.         int c = ++i;
  8.         printf("%d\n%d\n%d\n",a,b,c);     
  9. }
复制代码


代码仅用于说明问题,实际程序不建议混合使用 i++ ++i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还是前辈讲得好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 10:28:16 | 显示全部楼层

这。。这。。你这头像我怀疑咱俩认识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
后面的一个的出来得答案类似
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 13:27:59 | 显示全部楼层
SHRS23 发表于 2020-2-11 10:28
这。。这。。你这头像我怀疑咱俩认识

不不尼想太多啦我只是个小萌新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
建议反编译看下代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:38:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 00:08:53 | 显示全部楼层
大肥侃子 发表于 2020-2-11 13:27
不不尼想太多啦我只是个小萌新

无中生友
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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