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
求助!!!谢谢!!! --i ++i 运行后,才运行的输出语句。 这样的语句,后面的命令先运行,输出的命令最后运行的。 有些语句在不同的编译器运行的顺序是不一样的,很多细节要注意,我也不是很清楚这俩的不同,你主要用什么编译器就记住这个编译器的一些运行结果,然后写程序注意就行了。 本帖最后由 大肥侃子 于 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;
}
这种情况问题不是出在 ++ -- 上,而是出在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 SHRS23 发表于 2020-2-11 00:31
这种情况问题不是出在 ++ -- 上,而是出在printf函数上
在printf函数中的表达式不是按照从左到右的顺序依 ...
{:10_287:}还是前辈讲得好 大肥侃子 发表于 2020-2-11 00:55
还是前辈讲得好
这。。这。。你这头像我怀疑咱俩认识{:10_277:}{:10_277:} #include<stdio.h>
int main()
{
int i=5;
printf("%d\n%d\n%d\n",i,--i,++i);
}
得出来的时556
printf函数中参数的计算顺序是从右至左
因此,得出来的时556
后面的一个的出来得答案类似 SHRS23 发表于 2020-2-11 10:28
这。。这。。你这头像我怀疑咱俩认识
{:10_307:}不不尼想太多啦我只是个小萌新 今天我看了几个类似++ --的问题,我个人的感觉,首先是编译器的选择会影响结果
其次,我个人的感觉是
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
建议反编译看下代码
一直都有人问这个问题,麻烦学会搜索
https://fishc.com.cn/thread-132932-1-1.html
https://fishc.com.cn/thread-152900-1-1.html 大肥侃子 发表于 2020-2-11 13:27
不不尼想太多啦我只是个小萌新
无中生友
页:
[1]