我知道的?
有一个数组,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)这意味着再次来之后值增加