[英]Comma operator in condition of loop in C
#include <stdio.h>
main()
{
int i;
for(i=0; i<0, 5; i++)
printf("%d\n", i);
}
我無法理解for
循環條件中的i<0, 5
部分。
即使我讓它i>0, 5
,輸出也沒有變化。
這是如何運作的?
逗號運算符將始終產生逗號分隔列表中的最后一個值。
基本上,它是一個二元運算符,它計算左側值但丟棄它,然后計算右側值並返回它。
如果您鏈接其中的多個,它們最終將產生鏈中的最后一個值。
根據 anatolyg 的評論,如果您想在右手值之前評估左手值(如果左手評估具有理想的副作用),這很有用。
例如i < (x++, x/2)
將是使用該運算符的一種明智的方式,因為您正在影響右手值並影響左手值評估的影響。
http://en.wikipedia.org/wiki/Comma_operator
int x = 100;
while(x --> 0) {
// do stuff with x
}
這只是x-- > 0
的另一種寫法。
逗號運算符計算i<0
或i>0
並忽略。 因此,條件中始終存在5
。
所以它相當於:
for(i=0;5;i++)
逗號運算符完成初始化和增量部分,執行類似for(i=0,j=20;i<j;i++,j--)
的操作,如果您在比較部分執行此操作,它將評估最后一個(因為之前已經回答過)
i<0,5
將始終計算為5
,因為ex1,ex2
將始終返回正確的表達式。
逗號運算符適用於第一個操作數有一些副作用的情況。 這只是一個成語,旨在使您的代碼更具可讀性。 它對條件的評估沒有影響。
例如,
for (i = 0; i<(i++, 5); i++) {
// something
}
將增加i
,然后檢查是否i<5
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.