[i]和i [a]如何在C中給出相同的結果?對於整數數組| a |和Integer | i |在C中,a [i]給出與i [a]相同的結果
| i |不是一個數組,所以我[a]在語法上應該是不正確的,但是會給出與[i]相同的輸出。
我測試了代碼Codepad。
請解釋。
謝謝。
[i]和i [a]如何在C中給出相同的結果?對於整數數組| a |和Integer | i |在C中,a [i]給出與i [a]相同的結果
| i |不是一個數組,所以我[a]在語法上應該是不正確的,但是會給出與[i]相同的輸出。
我測試了代碼Codepad。
請解釋。
謝謝。
從C-FAQ:
Q:跨越含有表達5 [ 「ABCDEF」]一些笑話代碼來了。這怎麼可能是合法的C? [腳註]這個好奇的事實源於數組下標的指針定義,即a [e]與*((a)+(e))是相同的。 ),對於任何兩個表達式a和e,只要其中一個是指針表達式而另一個是整數。該``證明'看起來像
a[e]
*((a) + (e)) (by definition)
*((e) + (a)) (by commutativity of addition)
e[a] (by definition)
這沒有料到可交換經常用C文中提到,好像它是一件值得驕傲的,但它發現混淆的Ç大賽以外沒有任何有用的應用程序(參見問題20.36 )。由於C中的字符串是char數組,因此表達式「abcdef」[5]完全合法,並且計算結果爲字符'f'。你可以把它想象成一個簡寫
char *tmpptr = "abcdef";
... tmpptr[5] ...