我碰到這段代碼。在cout聲明中,條件評估爲true。在C++中訪問2D數組的起始元素
a[10][10]=’h’;
cout<<(a[0]==*a)&&(*a==0[a]);
使用0[a]
訪問數組元素/地址是新事物。 有人可以請解釋這種符號?
我碰到這段代碼。在cout聲明中,條件評估爲true。在C++中訪問2D數組的起始元素
a[10][10]=’h’;
cout<<(a[0]==*a)&&(*a==0[a]);
使用0[a]
訪問數組元素/地址是新事物。 有人可以請解釋這種符號?
從http://c-faq.com/aryptr/joke.html
問:我碰到含有表達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] ...
在C中,0[a]
與a[0]
具有完全相同的含義,並且二者相當於*a
。請參閱C FAQ。
只要a
是一個指針,所有這些表達式在C相同的語義++,因爲他們做在C.
假設a
是一個指針到一個對象,這些表述是總是相同的:
*a
0[a]
a[0]
這表示這些表達式(a[0]==*a)
和(*a==0[a])
也是相同的,都評估爲1
。
'COUT <<'是不是C. –
數學家會說,它的工作原理,因爲加法是可交換的。 – axiom
@PascalCuoq:我的不好。抱歉! – jairaj