我由彼得·範·德·林登最近翻翻C專家編程和整個這個使用了+ =運算符來了:如何使用C中的+ =運算符來演示相同的數組索引用於數組引用?
「如果你有一個複雜的數組引用,並要證明相同索引用於兩個參考文獻,然後:
node[i >> 3] += ~(0x01 << (i & 0x7));
是要走的路。
盡我所知,我無法弄清楚這段代碼。我希望這裏有人能夠解釋實際發生的事情,以及爲什麼可以用來證明使用了相同的索引?
我由彼得·範·德·林登最近翻翻C專家編程和整個這個使用了+ =運算符來了:如何使用C中的+ =運算符來演示相同的數組索引用於數組引用?
「如果你有一個複雜的數組引用,並要證明相同索引用於兩個參考文獻,然後:
node[i >> 3] += ~(0x01 << (i & 0x7));
是要走的路。
盡我所知,我無法弄清楚這段代碼。我希望這裏有人能夠解釋實際發生的事情,以及爲什麼可以用來證明使用了相同的索引?
我報價的解釋是,
node[COMPLICATED_EXPRESSION] += STUFF;
最好
node[COMPLICATED_EXPRESSION] = node[COMPLICATED_EXPRESSION] + STUFF;
,因爲它更容易一眼看出意圖是什麼。
更何況STUFF
也是複雜的,因爲這使得整體表達更難以一目瞭然地解析。
在這本書中,林登介紹,他顯示了代碼的來源:
我們直接把這個例子聲明瞭一些 代碼操作系統。只有數據名稱已被更改 以保護有罪。
我還沒有閱讀有問題的書,所以我只能離開你的報價。我懷疑什麼,他指的是這樣的:
而是寫的:
array[complicated_expression] = array[complicated_expression] + something_else
(注意兩個引用數組的索引相同)
你可以寫:
array[complicated_expression] += something_else
這表明複雜的表達式在「兩個參考」中都是相同的。
的另一種方式做到這一點是使用一個臨時變量:
int index = complicated_expression;
array[index] = array[index] + something_else
但是,這是不是簡潔。 (這是更一般的,因爲你可以用它來做一些沒有X=
操作符的操作。)
好吧,我明白了。我認爲我在表達的兩邊都被'我'拋棄了。謝謝! – arun 2012-01-31 19:00:07