0

对不起,我仍然是 C 的菜鸟。我想知道为什么 post 和 prefix 在“printf”中具有不同的效果,但在“for”或其他循环中具有相同的效果?

例子 :

#include <stdio.h>
main()
{
    int number = 0;
    printf("%d.\n", ++number); //It prints 1
    return 0;
}


...............
    printf("%d.\n", number++); //it prints 0
...............

但在“为”

#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
    }
.........................
4

2 回答 2

0

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf的第 6.5.2.4 节后缀递增和递减运算符:

后缀 ++ 运算符的结果是操作数的值。得到结果后,操作数的值递增。

但是,从 6.5.3.1 前缀递增和递减运算符:

前缀 ++ 运算符的操作数的值递增。结果是递增后操作数的新值。

C 标准有两个运算符是有原因的。从标准中可以看出,++xreturns (x+1)and setsx = (x+1)x++returns xand sets x = (x+1)

正如另一个答案所解释的,for循环不是函数调用,并且对于第三个表达式根本不使用表达式的值,所以没关系(但请注意,对于第二个表达式,表达式的值很重要! )。

于 2015-03-25T10:42:55.060 回答
0

for中,第三个表达式的结果被丢弃,所以它是numberor都没有关系number+1。只有改变变量值的副作用number仍然存在,并且对于后增量和预增量是相同的。

但是当你将它作为函数参数传递时,表达式的值很重要,那是不同的。请注意,这for不是一个函数,顺便说一句!

于 2015-03-20T18:33:05.923 回答