簡體   English   中英

C中循環條件下的逗號運算符

[英]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_o​​perator

旁注:你聽說過這個好奇的操作員嗎?

int x = 100;
while(x --> 0) {
    // do stuff with x
}

這只是x-- > 0的另一種寫法。

逗號運算符計算i<0i>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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM