2014-06-18 66 views
3

這兩個代碼是否相同? for循環中的這些語句用逗號分隔,寫在同一行中。他們會從左到右進行評估嗎?由逗號分隔的for循環內的語句評估從左至右

此外,我想問問,我可以使用多達語句在for循環中以逗號分隔。就像(i = 0,j = 0,k = 0; .......)一樣

for(i=0, j= strlen(s)-1; i<j; i++, j--){ 
    c=s[i]; 
    s[i]=s[j]; 
    s[j]=c; 
} 

for(i=0, j= strlen(s)-1; i<j; i++, j--) 
     c=s[i],s[i]=s[j],s[j]=c; 
+0

後面的逗號分隔字符串只會讓您感到迷惑。 for循環定義(不是body)的用法是合適的。我會告訴你,如果'i'和'j'是* unsigned *類型(比如'size_t'或'unsigned int')*並且*你傳遞了一個零長度的字符串's'到這個(0-在終止'S [0]',你不會喜歡的結果 – WhozCraig

+0

@Lord索爾特呵呵呵不,我就不能使用,如果你說 –

+0

@LZ:我喜歡逗號操作有時我覺得它可以使函數更容易閱讀,如果函數中的重要概念不是對多個變量的單獨賦值,那麼就會壓縮什麼是不重要的,我認爲它是一個有效的語言結構,程序員應該理解這個結構。下一步是什麼?由於縮進和行在大括號之前餵食? – johnnycrash

回答

6

的C逗號運算每兩個操作數的,丟棄所述第一結果和返回的第二個。使用多於一個逗號,操作員保持關聯,因此效果是從左到右的評估。因此

你的第二個例子會做同樣的事情,你的第一個例子。然而,它的風格差,因爲沒有理由使用逗號操作,不像i=0, j-strlen(s)-1for語句,其中已經不能使用分號的體內。

+0

很好的解釋,謝謝你的幫助:) –

3

,操作者進行評估從左到右,有左側的評價和右操作數之間的序列點,所以這意味着兩個代碼是等效的。

+0

謝謝先生,現在它明確 –