我知道什么?
有一个数组int a[10]
,要访问它的第一个元素,我可以使用a[0]
或0[a]
;
这导致
*(a+0) and *(0+a) -> Both results in accessing first element of the array.
我想知道什么?
我想知道是否有任何使用0 [a]而不是[0]更实际的情况?
答案 0 :(得分:2)
不,这是相反的方式。当{1}和a + b
是指针而另一个是整数时,b + a
和*(a + b)
意思相同。这导致*(b + a)
和a[b]
含义相同,而 导致b[a]
和i + p
含义相同。
通过添加指向整数(i[p]
)的指针,有些情况更易读。通过索引整数({{1}}),没有更易读的案例。不要这样做。
答案 1 :(得分:1)
在您的示例int a[10]
中,编写0[a]
永远不会更实际。
FredOverflow链接到一个示例,但从注释中提取原因有点困难。所以我会把它添加为答案。
如果a[0]
可以是任何表达式(或者例如宏参数)而不是简单名称,则 0[a]
和a
不是必然等效。< / p>
假设a
扩展为b + 1
。然后b + 1[0]
与0[b + 1]
完全不同。
为了涵盖这个尴尬的案例,您可以询问使用0[a]
代替(a)[0]
是否更实际。答案仍然没有。除非你赞成简洁而不是熟悉。
宏可以扩展为包含不匹配的括号,例如#define a x]+0[x
或其他东西,因此在所有情况下两者仍然不是严格等效的。但如果a
是表达式,则0[a]
和(a)[0]
是等效的。
答案 2 :(得分:-5)
(0 + a)这意味着在时间值增量和(a + 0)这意味着再次来之后值增加