通过[0]或0 [a]访问数组元素,实际用法是什么?

时间:2013-02-14 10:06:10

标签: c

我知道什么?

有一个数组int a[10],要访问它的第一个元素,我可以使用a[0]0[a]; 这导致

*(a+0) and *(0+a) -> Both results in accessing first element of the array. 

我想知道什么?

我想知道是否有任何使用0 [a]而不是[0]更实际的情况?

3 个答案:

答案 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)这意味着再次来之后值增加