我知道的?
有一个数组,int a[10]
要访问它的第一个元素,我可以使用a[0]
或0[a]
; 这导致
*(a+0) and *(0+a) -> Both results in accessing first element of the array.
我想知道什么?
我想知道使用 0[a] 而不是 a[0] 是否更实用?
我知道的?
有一个数组,int a[10]
要访问它的第一个元素,我可以使用a[0]
或0[a]
; 这导致
*(a+0) and *(0+a) -> Both results in accessing first element of the array.
我想知道什么?
我想知道使用 0[a] 而不是 a[0] 是否更实用?
不,是相反的。当一个是指针而另一个是整数时a + b
,意思是一样的。b + a
这导致*(a + b)
并*(b + a)
意味着相同的事情,并且导致并a[b]
意味着b[a]
相同的事情。
i + p
通过添加指向整数 ( )的指针,可以使某些情况更具可读性。i[p]
通过索引整数 ( ) ,没有任何案例更易读。不要这样做。
在您的示例int a[10]
中,不,编写0[a]
.
FredOverflow 链接到一个示例,但从评论中提取原因有点困难。因此,我将其添加为答案。
a[0]
如果可以是任何表达式(或例如宏参数)而不是简单名称,0[a]
则不一定等价。a
假设a
展开为b + 1
。那么b + 1[0]
与 完全不同0[b + 1]
。
为了解决这个尴尬的情况,您可以询问使用它是否更实用0[a]
而不是(a)[0]
. 答案仍然是否定的。除非你喜欢简洁而不是熟悉。
宏可以扩展为包含不匹配的括号,例如#define a x]+0[x
或其他内容,因此两者在所有情况下仍然不是严格等价的。但是 ifa
是一个表达式 then0[a]
并且(a)[0]
是等价的。
(0+a)这意味着在某个时间值增加,(a+0)这意味着再次来之后值增加