2012-01-31 37 views
6

我由彼得·範·德·林登最近翻翻C專家編程和整個這個使用了+ =運算符來了:如何使用C中的+ =運算符來演示相同的數組索引用於數組引用?

「如果你有一個複雜的數組引用,並要證明相同索引用於兩個參考文獻,然後:

node[i >> 3] += ~(0x01 << (i & 0x7)); 

是要走的路。

盡我所知,我無法弄清楚這段代碼。我希望這裏有人能夠解釋實際發生的事情,以及爲什麼可以用來證明使用了相同的索引?

回答

6

我報價的解釋是,

node[COMPLICATED_EXPRESSION] += STUFF; 

最好

node[COMPLICATED_EXPRESSION] = node[COMPLICATED_EXPRESSION] + STUFF; 

,因爲它更容易一眼看出意圖是什麼。

更何況STUFF也是複雜的,因爲這使得整體表達更難以一目瞭然地解析。

在這本書中,林登介紹,他顯示了代碼的來源:

我們直接把這個例子聲明瞭一些 代碼操作系統。只有數據名稱已被更改 以保護有罪。

+0

好吧,我明白了。我認爲我在表達的兩邊都被'我'拋棄了。謝謝! – arun 2012-01-31 19:00:07

4

我還沒有閱讀有問題的書,所以我只能離開你的報價。我懷疑什麼,他指的是這樣的:

而是寫的:

array[complicated_expression] = array[complicated_expression] + something_else 

(注意兩個引用數組的索引相同)

你可以寫:

array[complicated_expression] += something_else 

這表明複雜的表達式在「兩個參考」中都是相同的。

的另一種方式做到這一點是使用一個臨時變量:

int index = complicated_expression; 
array[index] = array[index] + something_else 

但是,這是不是簡潔。 (這是更一般的,因爲你可以用它來做一些沒有X=操作符的操作。)

相關問題