我被问到以下表达式的输出: -
I=10;
I++;
I++;
I++;
此代码末尾的I值是多少?据我所知,c中的post增量意味着首先执行任何其他任务,如赋值,printf等,并在它提供变量值之后。同样在这种情况下,首先我应该是10,然后我应该是10然后它将是11.但最终的答案是10。怎么样?
答案 0 :(得分:2)
答案应该是13。
int i = 10;
i++;
i++;
i++;
printf("%d", i);
自己测试
答案 1 :(得分:2)
这将是一个九行程序,用于演示问题中I
会发生什么。在包含I++;
的表达式中,使用I
然后递增。在您的示例中,由于I
未在任何语句中使用,因此您可能已经很好地使用++I
来预先递增它。但是,如果一个语句多次使用或测试I
,或者包含可能未执行的部分,则必须在之后增加I
。
#include<stdio.h>
int main() {
int I = 10;
I++;
I++;
I++;
printf ("%d\n", I); // prints 13
if (1 || I++) // I++ is not executed
printf ("%d\n", I); // prints 13
if (1 && I++) // I++ is executed
printf ("%d\n", I); // prints 14
return 0;
}
答案 2 :(得分:0)
让我们创建一个int i = 10;
i++;
基本上与:
相同i = i + 1;
虽然有一点点差异:
如果你printf("%d", i++);
打印值将为10,因为++
后缀仅在使用该值后才会增加值,并且i
仅在下一行上等于11,时间为:
printf("%d", i + 1);
将打印11,因为它将在printf
运行之前计算,i
它自己不会被更改,因为我们没有为其分配值,我们只用它来计算一个新的值。
如果您希望行为与i = i + 1;
完全相同,则可以使用++
前缀,如:
printf("%d", ++i);
在这种情况下将打印11,i
的值将增加1。
在您的代码中,您使用i
后缀增加++
3次而不实际使用i
,因此所有代码剂量都会增加i
一次。所以代码末尾i
等于13.
您可以在此处找到有关运营商的更多信息: http://www.tutorialspoint.com/cprogramming/c_operators.htm