对不起,我还是C的菜鸟。 我想知道为什么帖子和前缀在" printf"中有不同的效果?但是在"对于"或者在其他循环中有相同的效果?
示例:
#include <stdio.h>
main()
{
int number = 0;
printf("%d.\n", ++number); //It prints 1
return 0;
}
...............
printf("%d.\n", number++); //it prints 0
...............
但是&#34;对于&#34;
#include<stdio.h>
main()
{
int number;
for (number = 0; number < 5; ++number);
{
printf("%d\n", number); //it prints 0,1,2,3,4
}
return 0;
}
.............
for (number = 0; number < 5, number++);
{
printf("%d\n", number); //it prints 0,1,2,3,4
}
.........................
答案 0 :(得分:0)
在for
中,第三个表达式的结果被丢弃,因此如果它是number
或number+1
则无关紧要。只有改变number
变量值的副作用仍然存在,并且后期和预增量都是相同的。
但是当你把它作为函数参数传递时,表达式的值很重要,那就不同了。请注意for
不是函数,顺便说一下!
答案 1 :(得分:0)
从第6.5.2.4节http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf的后缀递增和递减运算符:
postfix ++运算符的结果是操作数的值。获得结果后,操作数的值会递增。
但是,从6.5.3.1前缀增量和减量运算符:
前缀++运算符的操作数的值递增。结果是增量后操作数的新值。
C标准有两个运营商是有原因的。从标准中可以看出,++x
会返回(x+1)
并设置x = (x+1)
而x++
会返回x
并设置x = (x+1)
。
正如另一个答案所解释的那样,for
循环不是函数调用,并且根本不使用表达式的值来表示第三个表达式,所以它没关系(但请注意第二个表达式)表达表达式的重要性!)。