2016-09-02 39 views
0

對不起,如果這是一個愚蠢的問題,但我遇到了用C語言編寫的這一行代碼,使我迷惑了來自JavaScript背景。C在IF聲明中的作業

short s; 
if ((s = data[q])) return s; 

這是分配數據[q],如果它等於真/ 1返回s?

+2

是的,你是對的。這已被討論[這裏](http://stackoverflow.com/questions/151850/why-would-you-use-an-assignment-in-a-condition) – byxor

+0

基本上它返回s只要data [q]是!= 0。在C中,除0之外的所有內容都是真實的。 (當然s被分配數據[q])。 – Nidhoegger

回答

5

是的,一項任務......很好地分配......但它也是一個表達。任何不等於零的值都將被評估爲true並且爲零。

這將是一樣

if ((s = data[q]) != 0) return s; 
+0

「評價爲1」的確令人困惑,更像是「任何非零值都將被視爲真實」。 – unwind

+0

謝謝,接受你的回答 – cocacrave

3

你的代碼被分配到data[q]s然後返回sif聲明。在s不等於0的情況下,您的代碼將返回s,否則將轉到下一條指令。

或者更好表示,將擴大到以下幾點:

short s; 
s = data[q]; 
if (s != 0) 
    return s; 
+0

哦,這很有趣。那麼任何其他的值都不是0?因爲我從JavaScript學到的東西是如果(真)返回一些東西。 – cocacrave

+0

C中不是'0'的每個值都被認爲是真的。 –

2

基本上Ç計算表達式。在

s = data[q] 

data[q]的值是這裏的表達式的值和條件是基於該評價。

分配

s <- data[q] 

只是一個side-effect


閱讀本[ article ]的順序點和副作用

+0

明白了,謝謝 – cocacrave