[英]Confusion with usage of Increment Operator
我正在學習C.我遇到了以下課程 -
#include <stdio.h>
int main() {
int var1 = 2, var2 = 6;
var2 = var2 || var1++ && printf("Computer World");
printf("%d %d\n", var1, var2);
return 0;
}
在Ubuntu 10.10上使用gcc 4.4.5進行編譯后,我得到的輸出為 -
2 1
我理解'var2'是如何設置為1的。
甚至認為'var1'上有一個遞增運算符,為什么當我們看到控制台輸出時它沒有增加?
var2 || var1++ && printf("Computer World");
是一個邏輯運算,所以如果var2
為true
(var2不等於零)那么第二個邏輯運算var1++ && printf("Computer World");
將不會被執行(它被稱為短路操作 )。 這就是為什么var1
沒有增加的原因
嘗試以這種方式反轉邏輯運算,你會得到var1
遞增:
var2 = var1++ && printf("Computer World") || var2;
在C中, ||
是一個快捷方式運算符,表示在exp1 || exp2
等exp1 || exp2
exp1 || exp2
,如果可以通過評估exp1
來確定此表達式的真值,則不會計算exp2
。
例如,在您的情況下,評估var2
的結果是6
,這在C中是正確的,因此表達式的其他部分,即var1++ && printf("Computer World")
將不會被評估。
您可以查看快捷操作符以獲取更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.