printf中的后缀和前缀以及函数(C)

时间:2015-03-20 18:27:46

标签: c prefix mathematical-expressions

对不起,我还是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
    }
.........................

2 个答案:

答案 0 :(得分:0)

for中,第三个表达式的结果被丢弃,因此如果它是numbernumber+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循环不是函数调用,并且根本不使用表达式的值来表示第三个表达式,所以它没关系(但请注意第二个表达式)表达表达式的重要性!)。