讓我們的工作,在:
if (...) continue;
這是一個if-statement
,用一個語句(continue
)作爲它的身體。
continue
語句只在循環中有效。所以,在某個地方有一個循環 - for
或do ... while
或while
- 這個聲明就在裏面。
如果條件爲真,不管是什麼,continue
都會導致循環主體的執行向前跳到循環體的末尾,評估循環的條件,並可能增加並開始下一個迭代(取決於環路防護,以及是否存在具有非空增量的for
循環)。
現在讓我們來看看裏面:
(int_1 += *pointer++ = int_2++) < int_3
這是一個括號表達式是與int_3
比較。因此,我們有這樣的:
temp < int_3
這是一個條件表達式,作爲一個if
語句中使用,這樣你就可以弄清楚,是如何去上班。
括號內的表達式如下所示:
int_1 += *pointer++ = int_2++
有使用二元算。三元(三個參數)和二元(兩個參數)優先級低於一元(一個參數)運算符。所以=
和+=
將被評估爲「最後」。事實上,賦值運算符是right-associative
這意味着,在給定的A = B = C
像這樣的一個方案中,(其中=
也可以是+=
,或%=
或其他),表達式將被佈置爲,如果它是:
A = (B = C)
分組到右邊,而不是像+
和*
那樣左邊分組,其中A + B + C變成(A + B)+ C。
所以你內心的表達將被分爲兩個部分:
int_1 += ( *pointer++ = int_2++ )
現在右手部分將首先評估:
*pointer++ = int_2++
有一個指針反引用(*
)運營商和兩個後增加運營商。
後增量運算符計算到電流值無論你正在申請它,但隨後導致該值後評價來增加。所以int_2++
真的是這樣的:
(temp = int_2, int_2 = int_2+1, temp)
同樣,說*pointer++ = value
真正含義:
*pointer = value
pointer = pointer + 1
所以,你有指針的當前值的目標被分配到的int_2
現值,然後他們兩個都增加。
C定義了它的賦值運算符來返回賦值的右值。也就是說,要將存儲的值返回到賦值運算符左側的任何左值。在這種情況下,=
賦值將返回int_2
的當前值(增量前)。
所以,你有你的表達的最後一部分:
int_1 += ...
知道了右邊的值(右值)將會是int_2
現值,你的代碼加入這個值到int_1
。 C的+=
運算符是簡寫:L += R
與L = L + R
相同,只是它僅評估一次L。所以最終的結果是像int_1 = int_1 + int_2
得到執行。
您會記得賦值運算符會返回它們的賦值。特殊賦值操作符也是如此。在這種情況下,+=
的結果將成爲構成您的if
聲明的A < B
比較的左側。
如果我們知道int_1
和int_2
是什麼,那麼我們可以決定是否要< int_3
,如果我們知道int_3
是什麼。 ;-)
作爲供參考,這不會是「專家語法」。這將是「高度混淆,寫得不好的語法,旨在混淆你」。 :-) – templatetypedef
@templatetypedef你打我幾乎相同的評論! –
請問你爲什麼?你爲什麼想要理解那可怕的語法? –