Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
printf和for函数(C)中的后缀和前缀_C_Prefix_Mathematical Expressions - Fatal编程技术网

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

printf和for函数(C)中的后缀和前缀,c,prefix,mathematical-expressions,C,Prefix,Mathematical Expressions,对不起,我在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

对不起,我在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
...............
#包括
main()
{
整数=0;
printf(“%d.\n”++数字);//它打印1
返回0;
}
...............
printf(“%d.\n”,数字++)//它打印0
...............
但是在“为了”

#包括
main()
{
整数;
用于(数字=0;数字<5;++数字);
{
printf(“%d\n”,数字);//它打印0,1,2,3,4
}
返回0;
}
.............
用于(数字=0;数字<5,数字++);
{
printf(“%d\n”,数字);//它打印0,1,2,3,4
}
.........................

for
中,第三个表达式的结果被丢弃,所以无论它是
数字还是
数字+1
。只有更改
number
变量值的副作用仍然存在,增量后和增量前的副作用相同


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

第6.5.2.4节后缀递增和递减运算符:

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

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

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

C标准有两个运算符是有原因的。从标准中可以看到,
++x
返回
(x+1)
并设置
x=(x+1)
,而
x++
返回
x
并设置
x=(x+1)


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

如果不使用表达式的值,则无关紧要。你看到放弃一个值然后给变量加1和给变量加1和放弃这个值之间的区别了吗?是的,我能看到区别。
#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
    }
.........................