回答
s2[ i ]
將被分配到s1[ i ]
然後將s1[ i ]
的值與ZERO進行比較。
請refer here瞭解更多信息。
在你的語言,但它確實不相等時與s1[ i ]
檢查,但在下面的序列中,
-
的
- 檢查值與
\0
- 返回
1
或0
- 分配值基於步驟2。
s1[i]
s2[i]
到
s1[i]
的分配的返回分配的值表達:
的表達式的值是左操作數的值的分配 完成後。
因此,當您有:
(s1[ i ] = s2[ i ]) != '\0'
然後你的分配的值(這是s1[i]
)比較'\0'
。
不等式首先進行賦值(s1[i] = s2[i]
),然後檢查s1[i]
是不是'\0'
。
我假定它是在一個,如果這樣:
if ((s1[i] = s2[i]) != '\0')
;// Do things
相當於:
s1[i] = s2[i];
if (s1[i] != '\0')
;// Do things
運算符優先和爲了評價決定了表達的評價程序。
運算符優先級,用於解釋表達式的狀態,即哪些運算符屬於哪個運算對象。它類似於數學優先級,例如,1+1*2
是3而不是4,因爲*
的優先級高於+
。由於該優先規則,表達式被評估爲1+(1*2)
。
評估順序與優先順序不同。它規定了評估子表達式的順序。另一個數學例子:我們知道(1*1) + (1+1)
總是3。但是當我們計算出來的時候,我們可以決定先從左括號開始,或者我們可以從正確的開始。運營商的優先級並不決定我們從哪一個開始。儘管*
的優先級高於+
,但我們可以先開始計算右側表達式,但不會影響結果。
但編程時,這種評估順序通常很重要。編譯器是決定這個順序的人。並且爲了使事情變得複雜,可以按照個案的情況進行操作,而不必記錄(「未指定的行爲」)。
- ()運算符的優先級最高,所以
(s1[i] = s2[i])
將得到首次評估。它裏面的一切都是一個子表達式。 在()子表達式中,[]運算符具有下一個優先級,所以接下來計算兩個「
s[i]
」。請注意,「s[i]
」也是子表達式,並且由於未指定子表達式的評估順序,因此編譯器可自由在s2[i]
之前或之後評估s1[i]
。在這種特定情況下,首先評估哪一個最有可能無關緊要。
在()子表達式中,接下來是=運算符。操作數
s2[i]
的內容被複制到s1[i]
。- 現在評估()中的所有表達式,我們得到結果,存儲在
s1[i]
中。 - 最後,子表達式的結果是表達式剩餘運算符的一個操作數:
!=
。另一個操作數是字符文字'\0'
。
+1解釋如何和爲什麼.. –
- 1. NodeJS以錯誤的順序執行代碼。爲什麼?
- 2. 代碼中的函數執行順序如foo(bar())是什麼?
- 3. 用戶空間代碼執行的順序是什麼?
- 4. rspec測試文件中的代碼執行順序是什麼?
- 5. 執行代碼的順序
- 6. 以下代碼的行爲是什麼?
- 7. 爲什麼此代碼的並行執行比順序慢?
- 8. F#代碼執行順序
- 9. Javascript執行代碼順序
- 10. PHP代碼執行順序
- 11. Node.js代碼執行順序
- 12. 代碼執行順序
- 13. postmessage的執行順序是什麼?
- 14. Interceptor的執行順序是什麼?
- 15. jQuery.empty()的執行順序是什麼?
- 16. Netlogo執行的順序是什麼?
- 17. 線程執行的順序是什麼?
- 18. python代碼是否按順序執行
- 19. 執行代碼執行順序
- 20. 以什麼順序C#執行sqlstatement?
- 21. 以下算法的順序是什麼?
- 22. 我想知道什麼樣的執行順序是爲下面的代碼的代碼WRT算法:
- 23. 以下代碼段的第三行代碼是做什麼的?
- 24. 代碼執行行的順序
- 25. 爲什麼控制流程不遵循代碼執行順序?
- 26. 爲什麼Javascript不能按順序執行代碼?
- 27. 爲什麼不按順序執行此JavaScript代碼?
- 28. 代碼行不按順序執行
- 29. JavaScript中執行代碼的順序 - navigator.geolocation
- 30. PHP中的代碼塊執行順序
不是'NULL',零。 – unwind
@unwind謝謝,我將NULL編輯爲零。 –
談到標準合規時,永遠不要信任Microsoft文檔。 – Lundin