关于表达式的后增量

时间:2014-11-19 17:45:58

标签: c

我被问到以下表达式的输出: -

I=10;
I++;
I++;
I++;

此代码末尾的I值是多少?据我所知,c中的post增量意味着首先执行任何其他任务,如赋值,printf等,并在它提供变量值之后。同样在这种情况下,首先我应该是10,然后我应该是10然后它将是11.但最终的答案是10。怎么样?

3 个答案:

答案 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