在哪些情况下i ++和++我可以引用相同的值?

时间:2014-02-06 10:47:58

标签: c increment

为什么i++++i在以下代码中相同?

#include <stdio.h>  

int main()  
{  
    int i=5;  

    while(1)  
    {  
        i++;                  /*replacing i++ by ++i also gives 6*/  
        printf("%d",i);  
        break;  
    }  

    return 0; 
}  

输出为6.我了解到增量运算符i++的值为i的当前值,并使i的存储值递增。但i's值为虽然i的当前值为5,但显示为6.虽然i++替换++i也会得到相同的值6.为什么i++++i在这种情况下相同且为什么虽然初始值为5,但输出为6。

6 个答案:

答案 0 :(得分:10)

执行顺序是顺序的。

i++或者就此而言++i是在该序列点执行的单条指令,i的值在任何地方使用那条指令,所以它并不重要。

如果您将printf("%d",i);替换为printf("%d",i++);printf("%d",++i);,则会有很大不同。

编辑:我还发现了一些非常有用的东西。在CC++中,前缀一元运算符返回lvalue,与后缀一元运算符形成对比,因此,如果您想要,例如,减少i两次,那么

(i--)--; // is illegal

,而

(--i)--; // is perfectly legal and works as intended.

答案 1 :(得分:1)

查看我在What is the difference between ++i and i++?

找到的答案

“++我将增加i的值,然后返回递增的值。”

“i ++将增加i的值,但返回我在增加之前保持的原始值。”

您不使用它返回的值,因此在您的情况下无关紧要。

答案 2 :(得分:1)

它仅更改在方法中使用时将设置的值。

使用i++你将在方法中使用i,一旦完成,我将会增加。

首先使用++I增加值,然后在方法中使用它。

答案 3 :(得分:1)

i++ - 在i中添加1会返回旧值。

++i - 向i添加1,返回新值。

在您的情况下:

i++ - 返回5并将{1}} i加1作为6.如果你抓住了 返回值i您可以获得清晰的想法。因为return的值为5。

i++ - 向++i添加1并将i设为6,然后返回i = 6

示例代码:

i

输出:

#include <stdio.h>  
int main()  
{  
    int i=5;  
    while(1)  
    {  
        int post, pre;
        post = i++;  
        printf("post : %d, i: %d\n", post,  i);  

        i = 5;
        pre = ++i;
        printf("pre : %d, i: %d\n", pre,  i);  
        break;  
    }  
    return 0; 
}  

答案 4 :(得分:0)

int i = 5;
i++;   // implies i = i + 1 ==> 6
       // Even ++i results the same          
printf("%d",i); // Obviously it prints 6 

答案 5 :(得分:0)

如果您没有将返回值分配给变量或将其用作参数,则结果完全相同。

两者之间的主要区别在于++ i增加变量并且只分配值,而i ++首先分配,然后增加。