printf和for函数(C)中的后缀和前缀
对不起,我在C还是个笨蛋。 我想知道为什么post和prefix在“printf”中有不同的效果,但在“for”或其他循环中有相同的效果 例如: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
#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
}
.........................