假设声明了一个数组
int a[8];
以下两种访问是等效的,即
2[a]
a[2]
原因
这和编译器访问数组时的计算方式有关,假设访问 a[2] ,编译器的计算方式如下:
*(a+2)
而在访问 2[a] 时,计算方式如下:
*(2+(a))
化简后相当于
*(2+a)
总结
a[2] 与 2[a] 之所以相同,是因为C实现下标的方法。虽然对编译器来说,这两种方式并无差别。但是我们应该避免2[a]这种写法,因为它会大大影响程序的可读性
假设声明了一个数组
int a[8];
以下两种访问是等效的,即
2[a]
a[2]
原因
这和编译器访问数组时的计算方式有关,假设访问 a[2] ,编译器的计算方式如下:
*(a+2)
而在访问 2[a] 时,计算方式如下:
*(2+(a))
化简后相当于
*(2+a)
总结
a[2] 与 2[a] 之所以相同,是因为C实现下标的方法。虽然对编译器来说,这两种方式并无差别。但是我们应该避免2[a]这种写法,因为它会大大影响程序的可读性