2014-02-06 53 views
3

爲什麼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所存儲的值被incremented.But i's值顯示爲6雖然當前值i是5.替換由++ii++也給出了相同的值6.爲什麼是i++++i相同在這種情況下,爲什麼輸出是6雖然初始值是5

+0

另請參見[編程前後增量](https://stackoverflow.com/questions/16733015/pre-and-post-increment-in-programming)和[我在哪裏可以找到++的實現運算符?](https://stackoverflow.com/questions/14169145/where-can-i-find-the-implementation-for-the-operator/14169214#14169214) – Cilyan

+0

謝謝大家的幫助 – user3124361

回答

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. 
0
int i = 5; 
i++; // implies i = i + 1 ==> 6 
     // Even ++i results the same   
printf("%d",i); // Obviously it prints 6 
1

查看我在What is the difference between ++i and i++?發現的答案

「++我會增加數值的i,然後返回遞增的值。「

「i ++會增加i的值,但返回增加前我保留的原始值。」

你不使用它返回的值,所以在你的情況下沒有關係。

1

它只會改變在方法中使用時設置的值。

隨着i++你會使用我的方法,一旦完成,我會增加。

隨着++I首先你增加值,然後你在方法中使用它。

1

i++ - 將1加1返回舊值。

++i - 給我加1,返回新值。

你的情況:

i++ - 返回5加1到i使i爲6.如果你趕上i++的 返回值就可以得到清晰的概念。因爲返回的值將爲5.

++i - 加1 i和使i爲6然後返回i = 6

樣品的編號:

#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; 
} 

輸出:

post : 5, i: 6 
pre : 6, i: 6 
0

如果您不將返回的值分配給變量或將其用作參數,則結果完全相同。

兩者之間的主要區別是++ ++增量變量,然後只賦值,而i ++先賦值,然後增值。

相關問題