2014-02-14 75 views

回答

1

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] ... 
0

因爲你可以做到以下幾點:

a[i] == *(a + i) == *(i + a) == i[a] 

看看here

相關問題